iOS 앱에서 문서 폴더 안에 폴더 만들기


답변:


326

나는 다음과 같이한다 :

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

1
답장을 보내 주셔서 감사하지만 작동하지만 응용 프로그램의 문서 폴더 옆에 "MyFolder"폴더를 만듭니다. 왜 실제로 몰라
미나 미카엘

3
죄송합니다. 오타가있었습니다. 문서 경로에 @ "MyFolder"가 아니라 @ "/ MyFolder"를 추가해야합니다.
블라디미르

2
세 번째 줄을 NSString으로 변경할 수 있습니다. * dataPath = [documentsDirectory stringByAppendingString : @ "/ MyFolder"]; NSSearchPathForDirectoriesInDomains는 후행 슬래시를 반환하지 않기 때문에.
Andreas

13
더 정확한 "stringByAppendingPathComponent"를 사용하도록 코드를 수정했습니다. "/"가있는 입력 문자열에 관계없이 올바른 작업을 수행합니다.
Kendall Helmstetter Gelner

많은 도움이되었습니다 .. 감사 Vladimir
Cathy

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 응용 프로그램의 Documents 디렉토리 경로 가져 오기

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

1
문서 디렉토리 경로를 검색하는 가장 간단한 방법은 다음과 같습니다.NSString* path = [@"~/Documents" stringByExpandingTildeInPath];
S1LENT WARRIOR

14

스위프트 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)")
                }
            }
        }
    }

9

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

1
Apple이 Documents 디렉토리의 이름을 "MyDocuments"(또는 유사)로 변경하기로 결정한 경우에도 접근 방식이 작동하지 않습니다.
Mehlyfication

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

    }

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

NSDocumentsDirectory 대신 NSDocumentDirectory 여야합니다
Pradeep Reddy Kypa

3

스위프트 4.0

let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
// Get documents folder
let documentsDirectory: String = paths.first ?? ""
// Get your folder path
let dataPath = documentsDirectory + "/yourFolderName"
if !FileManager.default.fileExists(atPath: dataPath) {
    // Creates that folder if not exists
    try? FileManager.default.createDirectory(atPath: dataPath, withIntermediateDirectories: false, attributes: nil)
}

새로 작성된 디렉토리에 데이터를 쓰는 방법?
로거

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 : / var / mobile / Applications / BD4B5566-1F11-4723-B54C-F1D0B23CBC / Documents / 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...")
    }

}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.