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
3行目をNSString * dataPath = [documentsDirectory stringByAppendingString:@ "/ MyFolder"]に変更することもできます。NSSearchPathForDirectoriesInDomainsは末尾のスラッシュを返さないためです。
Andreas、

13
より適切な「stringByAppendingPathComponent」を使用するようにコードを修正しました。これは、入力文字列に「/」があるかどうかに関係なく、正しいことを行います。
Kendall Helmstetter Gelner、

おかげでウラジミール
キャシー

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

1
私が考えるドキュメントディレクトリのパスを取得する最も簡単な方法は次のとおりです。NSString* path = [@"~/Documents" stringByExpandingTildeInPath];
S1LENT WARRIOR

14

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

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

8
ティムの答えを見てください。NSSearchPathForDirectoryiesInDomainsの使用は、ユーザーのドキュメントディレクトリを取得する標準的な方法です。
Tim Swast 2011年

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 '30 / 09/30

3

Swift 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

Swift 1.2およびiOS 8

ドキュメントディレクトリ内にカスタムディレクトリ(name = "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.