Was ist falsch an meinem Code zum Abrufen der Dateinamen im Dokumentordner?
func listFilesFromDocumentsFolder() -> [NSString]?{
var theError = NSErrorPointer()
let dirs = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true) as? [String]
if dirs != nil {
let dir = dirs![0] as NSString
let fileList = NSFileManager.defaultManager().contentsOfDirectoryAtPath(dir, error: theError) as [NSString]
return fileList
}else{
return nil
}
}
Ich dachte, ich hätte die Dokumente richtig gelesen und bin mir sehr sicher, was sich im Dokumentenordner befindet, aber "fileList" zeigt nichts an? "dir" zeigt den Pfad zum Ordner.
Antworten:
Diese Lösung funktioniert mit Swift 4 (Xcode 9.2) und auch mit Swift 5 (Xcode 10.2.1+):
Hier ist eine wiederverwendbare FileManager-Erweiterung, mit der Sie auch versteckte Dateien überspringen oder in die Ergebnisse aufnehmen können:
quelle
Swift 5
quelle
.
und ein.cloud
Suffix im Dateinamen enthalten. versuchen Sielet icloudFiles = directoryContents.filter{ $0.pathExtension == "icloud" }
es sollte die DateienEine kürzere Syntax für SWIFT 3
Anwendungsbeispiel:
Getestet auf xCode 8.2.3 für iPhone 7 mit iOS 10.2 und iPad mit iOS 9.3
quelle
Apple sagt über
NSSearchPathForDirectoriesInDomains(_:_:_:)
:Mit Swift 5
FileManager
wird eine Methode aufgerufencontentsOfDirectory(at:includingPropertiesForKeys:options:)
.contentsOfDirectory(at:includingPropertiesForKeys:options:)
hat die folgende Erklärung:Um die URLs der im Dokumentenverzeichnis enthaltenen Dateien abzurufen, können Sie daher das folgende Codefragment verwenden
FileManager
, das surls(for:in:)
undcontentsOfDirectory(at:includingPropertiesForKeys:options:)
Methoden verwendet:Die folgende
UIViewController
Implementierung zeigt beispielhaft, wie eine Datei aus dem App-Bundle im Dokumentenverzeichnis gespeichert wird und wie die URLs der im Dokumentenverzeichnis gespeicherten Dateien abgerufen werden:quelle
Dieser Code druckt alle Verzeichnisse und Dateien in meinem Dokumentenverzeichnis aus:
Einige Änderungen Ihrer Funktion:
Welches wird aufgerufen von:
quelle
Swift 2.0-Kompatibilität
ODER
quelle
Einfache und dynamische Lösung (Swift 5):
quelle