2009-11-19 199 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”旁边的应用程序的文档文件夹..不在里面。 不知道为什么 – 2009-11-19 12:22:43

+3

对不起 - 有一个错字 - 必须在文档路径中追加@“/ MyFolder”,而不是@“MyFolder”。 – Vladimir 2009-11-19 12:26:08

+0

是的,我发现,感谢您的帮助:) – 2009-11-19 12:28:41

9

我不喜欢 “[路径objectAtIndex:0]”,因为如果苹果增加了一个新的文件夹以 “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

查看Tim的回答。使用NSSearchPathForDirectoryiesInDomains是检索用户Documents目录的标准方式。 – 2011-03-18 01:11:12

+1

如果Apple决定将文档目录重命名为“我的文档”(或类似文档),那么您的方法也无效。 – Mehlyfication 2014-12-05 08:01:58

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获取路径 应用程序的Documents目录

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

我认为检索文档目录路径的最简单方法是:'NSString * path = [@“〜/ Documents”stringByExpandingTildeInPath];' – 2014-07-21 12:15:38

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 – 2017-09-30 05:34:11

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"]; 

结果:

目录中创建!

数据路径:在/ var /移动/应用/ BD4B5566-1F11-4723-B54C-F1D0B23CBC /文档/ MyFolder中

1

夫特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

夫特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) 
} 
相关问题