2009-11-19 8 views

Répondre

311

je fais que de la façon suivante:

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

e anks pour la réponse, il fonctionne mais il crée le dossier "MyFolder" à côté du dossier de documents de l'application .. pas à l'intérieur. Je ne sais pas pourquoi réellement –

+3

Désolé - était une faute de frappe là - doit ajouter @ "/ MyFolder", pas @ "MyFolder" à un chemin de documents. – Vladimir

+0

oui, j'ai découvert cela, merci pour l'aide :) –

9

Je n'aime pas "[chemins objectAtIndex: 0]" parce que si Apple ajoute un nouveau dossier commençant par "A", "B" oder « C ", le dossier" Documents "n'est pas le premier dossier du répertoire.

Mieux:

NSString *dataPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/MyFolder"]; 
if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]) 
    [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]; //Create folder 
+8

Voir la réponse de Tim. L'utilisation de NSSearchPathForDirectoryiesInDomains est la méthode standard de récupération d'un répertoire Documents d'utilisateurs. –

+1

Si Apple décide de renommer le répertoire Documents en "MyDocuments" (ou similaire), votre approche ne fonctionnera pas non plus. – Mehlyfication

15

Je n'ai pas assez réputation pour commenter la réponse de Manni, mais [chemins objectAtIndex: 0] est le moyen standard d'obtenir des documents de l'application Répertoire

http://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/StandardBehaviors/StandardBehaviors.html#//apple_ref/doc/uid/TP40007072-CH4-SW6

Étant donné que la fonction NSSearchPathForDiriesiesInDomains a été conçue à l'origine pour Mac OS X, où il peut y avoir plus de qu'un de chacun de ces répertoires, renvoie un tableau de chemins plutôt qu'un seul chemin. Dans iOS, le tableau résultant doit contenir le chemin unique vers le répertoire. Le Listing 3-1 montre une utilisation typique de cette fonction .

Listing 3-1 Obtenir le chemin vers le répertoire de l'application Documents

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

Je pense que la façon la plus simple de récupérer le chemin du répertoire de documents est: 'NSString * chemin = [@" ~/Documents "stringByExpandingTildeInPath];' –

5

Cela fonctionne bien pour moi,

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

Il doit être NSDocumentDirectory au lieu de NSDocumentsDirectory –

1

code suivant peut aider dans la création de répertoire:

-(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 

} 

Utilisation:

[self createDirectory:@"MyFolder"]; 

Résultat:

répertoire créé!

DATAPATH:/var/mobile/Applications/BD4B5566-1F11-4723-B54C-F1D0B23CBC/Documents/MyFolder

1

Swift 1.2 et iOS 8

Créer un répertoire personnalisé (name = "MyCustomData") dans le répertoire des documents, mais uniquement si le répertoire n'existe pas.

// 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

Le Swift 2 solution:

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

Swift 3 Solution:

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

Swift 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) 
} 
Questions connexes