Voglio solo creare nuove cartelle nella cartella documenti della mia app per iPhone.Creare una cartella all'interno della cartella documenti nelle app iOS
Qualcuno sa come farlo?
Apprezzo il tuo aiuto!
Voglio solo creare nuove cartelle nella cartella documenti della mia app per iPhone.Creare una cartella all'interno della cartella documenti nelle app iOS
Qualcuno sa come farlo?
Apprezzo il tuo aiuto!
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
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
Vedi la risposta di Tim. L'utilizzo di NSSearchPathForDirectoryiesInDomains è il modo standard per recuperare una directory Documenti dell'utente. –
Se Apple decide di rinominare la directory Documenti in "MyDocuments" (o simili), il tuo approccio non funzionerà neanche. – Mehlyfication
io non ho abbastanza fama di commentare la risposta di Manni, ma [percorsi objectAtIndex: 0] è il modo standard di ottenere l'applicazione Documenti Directory
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];
Penso che il modo più semplice per recuperare il percorso della directory dei documenti sia: 'NSString * path = [@" ~/Documents "stringByExpandingTildeInPath];' –
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");
}
Dovrebbe essere NSDocumentDirectory invece di NSDocumentsDirectory –
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
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...")
}
}
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)")
}
}
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)")
}
}
}
}
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)
}
° 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à –
Scusa - c'era un errore di battitura lì - deve aggiungere @ "/ MyFolder", non @ "MyFolder" a un percorso di documenti. – Vladimir
sì, ho scoperto che, grazie per l'aiuto :) –