2009-11-19 8 views

ответ

311

Я делаю это следующим образом:

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 
+0

й anks для ответа, он работает, но он создает папку «MyFolder» рядом с папкой документов приложения .. не внутри нее. не знаю почему на самом деле –

+3

Извините - там была опечатка - нужно добавить @ "/ MyFolder", а не @ MyFolder в путь к документам. – Vladimir

+0

да, я нашел это, спасибо за помощь :) –

9

мне не нравится "[пути 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 
+8

См. Ответ Тима. Использование NSSearchPathForDirectoryiesInDomains является стандартным способом получения каталога документов пользователей. –

+1

Если Apple решит переименовать каталог Documents в «MyDocuments» (или аналогичный), ваш подход также не будет работать. – Mehlyfication

15

Я не хватает репутации комментировать ответ Манни, но [пути objectAtIndex: 0] является стандартным способом получения документов директории приложения

http://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/StandardBehaviors/StandardBehaviors.html#//apple_ref/doc/uid/TP40007072-CH4-SW6

Поскольку функция NSSearchPathForDirectoriesInDomains была разработана первоначально для Mac OS X, где может быть больше , чем в одном из этих каталогов, возвращает массив путей, а не , чем один путь. В iOS результирующий массив должен содержать один путь к каталогу . В листинге 3-1 показано типичное использование этой функции .

Листинг 3-1 Получение пути к каталогу Документы в приложения

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
+0

Я думаю, что самый простой способ получить путь к каталогу документов: 'NSString * path = [@" ~/Documents "stringByExpandingTildeInPath];' –

5

Это прекрасно работает для меня,

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"); 
} 
+0

Это должен быть NSDocumentDirectory вместо NSDocumentsDirectory –

1

После кода может помочь в создании каталога:

-(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

1

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...") 
    } 

} 
8

Свифта 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)") 
     } 

    } 
7

Свифта 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)") 
       } 
      } 
     } 
    } 
1

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) 
}