Я просто хочу создать новые папки в папке документов моего iPhone-приложения.Создайте папку внутри папки документов в приложениях iOS
Кто-нибудь знает, как это сделать?
Цените свою помощь!
Я просто хочу создать новые папки в папке документов моего iPhone-приложения.Создайте папку внутри папки документов в приложениях iOS
Кто-нибудь знает, как это сделать?
Цените свою помощь!
Я делаю это следующим образом:
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"/MyFolder"];
if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
[[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]; //Create folder
мне не нравится "[пути objectAtIndex: 0]", потому что если Apple, добавляет новую папку, начиная с "A", "B" Одер «C ", папка" Документы "не является первой папкой в каталоге.
Лучше:
NSString *dataPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/MyFolder"];
if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
[[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]; //Create folder
См. Ответ Тима. Использование NSSearchPathForDirectoryiesInDomains является стандартным способом получения каталога документов пользователей. –
Если Apple решит переименовать каталог Documents в «MyDocuments» (или аналогичный), ваш подход также не будет работать. – Mehlyfication
Я не хватает репутации комментировать ответ Манни, но [пути objectAtIndex: 0] является стандартным способом получения документов директории приложения
Поскольку функция NSSearchPathForDirectoriesInDomains была разработана первоначально для Mac OS X, где может быть больше , чем в одном из этих каталогов, возвращает массив путей, а не , чем один путь. В iOS результирующий массив должен содержать один путь к каталогу . В листинге 3-1 показано типичное использование этой функции .
Листинг 3-1 Получение пути к каталогу Документы в приложения
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
Я думаю, что самый простой способ получить путь к каталогу документов: 'NSString * path = [@" ~/Documents "stringByExpandingTildeInPath];' –
Это прекрасно работает для меня,
NSFileManager *fm = [NSFileManager defaultManager];
NSArray *appSupportDir = [fm URLsForDirectory:NSDocumentsDirectory inDomains:NSUserDomainMask];
NSURL* dirPath = [[appSupportDir objectAtIndex:0] URLByAppendingPathComponent:@"YourFolderName"];
NSError* theError = nil; //error setting
if (![fm createDirectoryAtURL:dirPath withIntermediateDirectories:YES
attributes:nil error:&theError])
{
NSLog(@"not created");
}
Это должен быть NSDocumentDirectory вместо NSDocumentsDirectory –
После кода может помочь в создании каталога:
-(void) createDirectory : (NSString *) dirName {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // Fetch path for document directory
dataPath = (NSMutableString *)[documentsDirectory stringByAppendingPathComponent:dirName];
NSError *error;
if (![[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]) {
NSLog(@"Couldn't create directory error: %@", error);
}
else {
NSLog(@"directory created!");
}
NSLog(@"dataPath : %@ ",dataPath); // Path of folder created
}
Использование:
[self createDirectory:@"MyFolder"];
Результат:
каталог создан!
DATAPATH:/вар/мобильные/Применения/BD4B5566-1F11-4723-B54C-F1D0B23CBC/Документы/MyFolder
Swift 1,2 и IOS 8
Создание пользовательского каталога (имя = "MyCustomData") внутри каталога документов, но только в том случае, если каталог не существует.
// path to documents directory
let documentDirectoryPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as! String
// create the custom folder path
let myCustomDataDirectoryPath = documentDirectoryPath.stringByAppendingPathComponent("/MyCustomData")
// check if directory does not exist
if NSFileManager.defaultManager().fileExistsAtPath(myCustomDataDirectoryPath) == false {
// create the directory
var createDirectoryError: NSError? = nil
NSFileManager.defaultManager().createDirectoryAtPath(myCustomDataDirectoryPath, withIntermediateDirectories: false, attributes: nil, error: &createDirectoryError)
// handle the error, you may call an exception
if createDirectoryError != nil {
println("Handle directory creation error...")
}
}
Свифта 2 решение:
let documentDirectoryPath: String = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first!
if !NSFileManager.defaultManager().fileExistsAtPath(documentDirectoryPath) {
do {
try NSFileManager.defaultManager().createDirectoryAtPath(documentDirectoryPath, withIntermediateDirectories: false, attributes: nil)
} catch let createDirectoryError as NSError {
print("Error with creating directory at path: \(createDirectoryError.localizedDescription)")
}
}
Свифта 3 Решение:
private func createImagesFolder() {
// path to documents directory
let documentDirectoryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first
if let documentDirectoryPath = documentDirectoryPath {
// create the custom folder path
let imagesDirectoryPath = documentDirectoryPath.appending("/images")
let fileManager = FileManager.default
if !fileManager.fileExists(atPath: imagesDirectoryPath) {
do {
try fileManager.createDirectory(atPath: imagesDirectoryPath,
withIntermediateDirectories: false,
attributes: nil)
} catch {
print("Error creating images folder in documents dir: \(error)")
}
}
}
}
Swift 3,0
var error: Error?
var paths: [Any] = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
var documentsDirectory: String = paths[0] as? String ?? ""
// Get documents folder
var dataPath: String = URL(fileURLWithPath: documentsDirectory).appendingPathComponent("/MyFolder").absoluteString
if !FileManager.default.fileExists(atPath: dataPath) {
try? FileManager.default.createDirectory(atPath: dataPath, withIntermediateDirectories: false, attributes: nil)
}
й anks для ответа, он работает, но он создает папку «MyFolder» рядом с папкой документов приложения .. не внутри нее. не знаю почему на самом деле –
Извините - там была опечатка - нужно добавить @ "/ MyFolder", а не @ MyFolder в путь к документам. – Vladimir
да, я нашел это, спасибо за помощь :) –