Ich möchte nur neue Ordner im Dokumentenordner meiner iPhone-App erstellen.
Weiß jemand, wie man das macht?
Schätze deine Hilfe!
Ich möchte nur neue Ordner im Dokumentenordner meiner iPhone-App erstellen.
Weiß jemand, wie man das macht?
Schätze deine Hilfe!
Antworten:
Ich mache das folgendermaßen:
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
Ich habe nicht genug Ruf, um Mannis Antwort zu kommentieren, aber [Pfade objectAtIndex: 0] ist die Standardmethode, um das Dokumentenverzeichnis der Anwendung abzurufen
Da die Funktion NSSearchPathForDirectoriesInDomains ursprünglich für Mac OS X entwickelt wurde, in dem möglicherweise mehr als eines dieser Verzeichnisse vorhanden ist, wird anstelle eines einzelnen Pfads ein Array von Pfaden zurückgegeben. In iOS sollte das resultierende Array den einzelnen Pfad zum Verzeichnis enthalten. Listing 3-1 zeigt eine typische Verwendung dieser Funktion.
Listing 3-1: Abrufen des Pfads zum Verzeichnis "Dokumente" der Anwendung
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* path = [@"~/Documents" stringByExpandingTildeInPath];
Swift 3 Lösung:
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)")
}
}
}
}
Ich mag "[path objectAtIndex: 0]" nicht, denn wenn Apple einen neuen Ordner hinzufügt, der mit "A", "B" oder "C" beginnt, ist der Ordner "Documents" nicht der erste Ordner im Verzeichnis.
Besser:
NSString *dataPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/MyFolder"];
if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
[[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]; //Create folder
Die Swift 2- Lösung:
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)")
}
}
Das funktioniert gut für mich,
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");
}
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)
}
Der folgende Code kann beim Erstellen des Verzeichnisses hilfreich sein:
-(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
}
Verwendung :
[self createDirectory:@"MyFolder"];
Ergebnis:
Verzeichnis erstellt!
dataPath: / var / mobile / Applications / BD4B5566-1F11-4723-B54C-F1D0B23CBC / Documents / MyFolder
Swift 1.2 und iOS 8
Erstellen Sie ein benutzerdefiniertes Verzeichnis (name = "MyCustomData") im Dokumentenverzeichnis, jedoch nur, wenn das Verzeichnis nicht vorhanden ist.
// 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...")
}
}