2009-11-19 17 views

Respuesta

311

lo hago de la siguiente manera:

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 para la respuesta, funciona pero crea la carpeta "MyFolder" junto a la carpeta de documentos de la aplicación ... no dentro de ella. no sé por qué en realidad –

+3

Lo sentimos, fue un error tipográfico allí - debe agregar @ "/ MyFolder", no @ "MyFolder" a una ruta de documentos. – Vladimir

+0

sí, descubrí eso, gracias por su ayuda :) –

9

no me gusta "[caminos objectAtIndex: 0]" porque si Apple añade una nueva carpeta que comienza con "A", "B" oder "C ", la carpeta" Documentos "no es la primera carpeta en el directorio.

Mejor:

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

Ver la respuesta de Tim. El uso de NSSearchPathForDirectoryiesInDomains es la forma estándar de recuperar el directorio de documentos de un usuario. –

+1

Si Apple decide cambiar el nombre del directorio de documentos a "MyDocuments" (o similar), su enfoque tampoco funcionará. – Mehlyfication

15

no tengo la reputación suficiente para comentar sobre la respuesta de Manni, pero [caminos objectAtIndex: 0] es la forma habitual de obtener los documentos de la aplicación Directorio

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

Porque la función 0SSNSSearchPathForDirectoriesInDomains se diseñó originalmente para Mac OS X, donde podría haber más que uno de estos directorios, , devuelve una matriz de rutas más bien que una sola ruta. En iOS, la matriz resultante debe contener la ruta única al directorio. El listado 3-1 muestra un uso típico de esta función .

Listado 3-1 Obtención de la ruta al directorio Documentos de la aplicación

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

Creo que la forma más sencilla de recuperar la ruta del directorio de documentos es: 'NSString * path = [@" ~/Documents "stringByExpandingTildeInPath];' –

5

Esto funciona muy bien para mí,

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

Debe ser NSDocumentDirectory en lugar de NSDocumentsDirectory –

1

siguiente código puede ayudar en la creación de directorio:

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

Resultado:

directorio creado!

camino de datos:/var/mobile/Applications/BD4B5566-1F11-4723-B54C-F1D0B23CBC/Documentos/MiCarpeta

1

Swift 1.2 y iOS 8

Crear directorio personalizado (name = "MyCustomData") dentro del directorio de documentos, pero solo si el directorio no existe.

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

El Swift 2 solución:

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 Solución:

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) 
} 
Cuestiones relacionadas