2009-11-19 197 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) 
} 
相關問題