在iOS应用中的文档文件夹中创建一个文件夹

Min*_*ael 150 iphone directory document new-operator nsfilemanager

我只想在我的iPhone应用程序的文档文件夹中创建新文件夹.

有谁知道怎么做?

感谢您的帮助!

Vla*_*mir 324

我这样做的方式如下:

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
Run Code Online (Sandbox Code Playgroud)

  • 我修改了代码以使用更正确的"stringByAppendingPathComponent",无论输入字符串是否具有"/",这都是正确的. (12认同)
  • 对不起 - 那是一个错字 - 必须附加@"/ MyFolder",而不是@"MyFolder"到文档路径. (3认同)
  • 您可能希望将第三行更改为NSString*dataPath = [documentsDirectory stringByAppendingString:@"/ MyFolder"]; 因为NSSearchPathForDirectoriesInDomains不返回尾部斜杠. (2认同)

Tim*_*Tim 14

我没有足够的声誉评论Manni的答案,但[paths 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];
Run Code Online (Sandbox Code Playgroud)


Mir*_*bic 13

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)")
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)


Man*_*nni 9

我不喜欢"[paths objectAtIndex:0]",因为如果Apple添加一个以"A","B"或"C"开头的新文件夹,则"Documents"文件夹不是目录中的第一个文件夹.

更好:

NSString *dataPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/MyFolder"];
if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
    [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]; //Create folder
Run Code Online (Sandbox Code Playgroud)

  • 看到蒂姆的回答.使用NSSearchPathForDirectoryiesInDomains是检索用户文档目录的标准方法. (8认同)

raf*_*tta 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)")
        }

    }
Run Code Online (Sandbox Code Playgroud)


小智 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");
}
Run Code Online (Sandbox Code Playgroud)