2009-11-19 9 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

번째

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

+3

죄송합니다 - 거기에 오타가 있었으므로 문서 경로에 @ "MyFolder"가 아닌 @ "/ MyFolder"를 추가해야합니다. – Vladimir

+0

예, 발견했습니다. 도움을 주셔서 감사합니다. –

9

내가 좋아하지 않아 "[경로 objectAtIndex : 0]"때문에 애플은 C "데르,"A "와"B "를 시작하는 새 폴더를 추가하는 경우 ","Documents "- 폴더가 디렉토리의 첫 번째 폴더가 아닙니다.

더 나은 :

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를 사용하는 것은 사용자 Documents 디렉토리를 검색하는 표준 방법입니다. –

+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

NSDocumentsDirectory 대신 NSDocumentDirectory 여야합니다. –

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") 디렉토리가 존재하지 않는 경우에만.

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

    } 
8

스위프트 2 용액

답장을 보내면 이 작동하지만 응용 프로그램의 문서 폴더 옆에 "MyFolder"폴더가 생성됩니다. 그 안에는 없습니다. 왜 실제로 모르겠습니까?
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) 
}