2009-11-19 28 views

risposta

311

lo faccio nel modo seguente:

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 per la risposta, funziona ma crea la cartella "MyFolder" accanto alla cartella documenti dell'app .. non al suo interno. non so perché in realtà –

+3

Scusa - c'era un errore di battitura lì - deve aggiungere @ "/ MyFolder", non @ "MyFolder" a un percorso di documenti. – Vladimir

+0

sì, ho scoperto che, grazie per l'aiuto :) –

9

che non mi piace "[percorsi objectAtIndex: 0]", perché se Apple aggiunge una nuova cartella che inizia con "A", "B" oder "C ", la cartella" Documenti "non è la prima cartella nella directory.

Meglio:

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

Vedi la risposta di Tim. L'utilizzo di NSSearchPathForDirectoryiesInDomains è il modo standard per recuperare una directory Documenti dell'utente. –

+1

Se Apple decide di rinominare la directory Documenti in "MyDocuments" (o simili), il tuo approccio non funzionerà neanche. – Mehlyfication

15

io non ho abbastanza fama di commentare la risposta di Manni, ma [percorsi objectAtIndex: 0] è il modo standard di ottenere l'applicazione Documenti Directory

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

Poiché la funzione NSSearchPathForDirectoriesInDomains è stata progettata originariamente per Mac OS X, dove potrebbe esserci più di una di queste directory, restituisce una serie di percorsi piuttosto di un singolo percorso. In iOS, l'array risultante deve contenere il singolo percorso nella directory. L'elenco 3-1 mostra un uso tipico di questa funzione .

Listing 3-1 Recupero del percorso di directory Documenti dell'applicazione

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

Penso che il modo più semplice per recuperare il percorso della directory dei documenti sia: 'NSString * path = [@" ~/Documents "stringByExpandingTildeInPath];' –

5

Questo funziona bene per me,

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

Dovrebbe essere NSDocumentDirectory invece di NSDocumentsDirectory –

1

seguito il codice può aiutare nella creazione di directory:

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

} 

Uso:

[self createDirectory:@"MyFolder"]; 

Risultato:

directory creata!

DataPath:/var/mobile/Applications/BD4B5566-1F11-4723-B54C-F1D0B23CBC/Documents/MiaCartella

1

Swift 1.2 e iOS 8

Creare directory personalizzata (name = "MyCustomData") all'interno della directory dei documenti ma solo se la directory non esiste.

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

Il Swift 2 soluzione:

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 Soluzione:

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) 
} 
Problemi correlati