Создать папку внутри папки в iOS приложения
Я просто хочу создать новые папки в папке "документы" моего приложения для iPhone.
кто-нибудь знает, как это сделать?
ценю вашу помощь!
9 ответов:
Я делаю это следующим образом:
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
У меня недостаточно репутации, чтобы прокомментировать ответ Манни, но [paths objectAtIndex: 0] является стандартным способом получения каталога документов приложения
потому что NSSearchPathForDirectoriesInDomains функция была разработана первоначально для Mac OS X, где может быть больше чем один из каждого из этих каталогов, он возвращает массив путей, а чем один путь. В iOS, the результирующий массив должен содержать один путь к каталогу. Листинг 3-1 показывает типичное использование этого функция.
листинг 3-1 получение пути к каталог документов приложения
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0];
Swift 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)") } } } }
мне не нравится "[paths objectAtIndex:0]", потому что если Apple добавляет новую папку, начинающуюся с "A", "B" oder "C", папка "документы"-это не первая папка в каталоге.
лучше:
NSString *dataPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/MyFolder"]; if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]) [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]; //Create folder
на Swift 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)") } }
это работает для меня,
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"); }
следующий код может помочь в создании каталога :
-(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 : /var / mobile / Applications / BD4B5566-1F11-4723-B54C-F1D0B23CBC / Documents / MyFolder
Swift 1.2 и iOS 8
создать пользовательский каталог (name = "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...") } }
Swift 4.0
var paths: [Any] = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) let documentsDirectory: String = paths[0] as? String ?? "" // Get documents folder let dataPath: String = URL(fileURLWithPath: documentsDirectory).appendingPathComponent("/MyFolder").absoluteString if !FileManager.default.fileExists(atPath: dataPath) { try? FileManager.default.createDirectory(atPath: dataPath, withIntermediateDirectories: false, attributes: nil) }