Durchlaufen der Dateien in einem Ordner und Ihre Unterordner durch die Verwendung von Swift-FileManager
Ich bin ganz neu bei der Programmierung eines Swift, und ich versuche, Sie zum Durchlaufen der Dateien in einem Ordner.
Ich warf einen Blick auf die Antwort hier und versuchte zu übersetzen, es zu Swift-syntax, aber war nicht erfolgreich.
let fileManager = NSFileManager.defaultManager()
let enumerator:NSDirectoryEnumerator = fileManager.enumeratorAtPath(folderPath)
for element in enumerator {
//do something
}
den Fehler den ich bekomme, ist:
Type 'NSDirectoryEnumerator' does not conform to protocol 'SequenceType'
Mein Ziel ist es, sich auf alle Unterordner und enthaltenen Dateien in den main Ordner und suchen Sie alle Dateien mit einer bestimmten Erweiterung zu tun, dann etwas mit Ihnen.
InformationsquelleAutor Iacopo Boccalari | 2014-08-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die
nextObject()
Methode derenumerator
:Konnte nicht dieser arbeiten ohne optionale Verkettung als pro user1398498 die Antwort von unten.
Nachdem ich gerade ausprobiert, habe ich nichts, aber eine Endlosschleife und musste mit Rainier Ansatz rund.
Sehr seltsam, dass eine eher grobe
while
ist bevorzugt über den dichtenfor
Lösung. (Oh, ich sehe ich schon sagte, auf der anderen Lösung ähnlich jedenfalls)Für diejenigen, die
enumerator(at:, includingPropertiesForKeys:, options:)
berücksichtigen, dass das element ist eigentlich eine URL nicht um einen String, so dass, wenn Sie mit diesem code wird es wieder nichts.while let element = enumerator?.nextObject() as? URL {...}
InformationsquelleAutor pNre
Heute (Anfang 2017) ist es dringend empfohlen, verwenden Sie die – vielseitiger – URL Verwandte API -
Dies ist ein gutes Beispiel dafür, wie das ausführen einer tiefen Suche und funktionierte großartig für mich. Vielen Dank für den schönen Beitrag.
InformationsquelleAutor vadian
Konnte ich nicht pNre Lösung zu arbeiten; die while-Schleife nur nie erhalten nichts. Allerdings habe ich in dieser Lösung die bei mir funktioniert (in Xcode 6 beta 6, so dass vielleicht Dinge haben sich geändert, seit pNre das oben geschrieben Antwort?):
der Grund, warum Sie Stimmen, weil es stützt sich auf erzwungene unwrapping von enumerator (enumerator!) im Gegensatz zu enumerator? in top-stimmten Antwort.
Achtung dies ist unbrauchbar großen Verzeichnissen - es können hängen für Minuten.
InformationsquelleAutor Rainier Wolfcastle
In Fall, dass Sie immer die
die while-Schleife sollte:
Es hat etwas zu tun mit optional chaining
InformationsquelleAutor user1398498
Swift 3
Wenn ich in diesem code habe ich gefunden, dass die Verzeichnisse/Dateien mit Leerzeichen im Pfad ignoriert wurden. Irgendeine Idee warum dies passiert? Dann habe ich versucht, @vadian ' s code, und es funktioniert wie erwartet.
InformationsquelleAutor user3441734
gibt alle Dateien in einem Verzeichnis
Swift 3
InformationsquelleAutor Alex Shubin
SWIFT 3.0
Gibt alle Dateien mit der Erweiterung in das Verzeichnis übergeben & seine Unterverzeichnisse
InformationsquelleAutor Ranjith
Swift3 + absolute urls
Basierend auf code von @user3441734
InformationsquelleAutor neoneye
Update für Swift 3:
InformationsquelleAutor dawg
Hinzufügen zu vadian ' s Reaktion-die Apple docs erwähnen, dass Pfad-basieren URLs sind einfacher in mancher Hinsicht, aber Datei-Verweis-URLs haben den Vorteil, dass die Referenz gültig bleibt, wenn die Datei verschoben oder umbenannt wird, während Ihre app ausgeführt wird.
Aus der Dokumentation "Zugriff auf Dateien und Verzeichnisse":
"Pfad-basieren URLs sind leichter zu manipulieren, leichter zu Debuggen und werden in der Regel bevorzugt von Klassen wie NSFileManager. Ein Vorteil der Datei-Verweis-URLs ist, dass Sie weniger zerbrechlich als Pfad-basieren URLs, während Ihre app ausgeführt wird. Wenn der Benutzer verschiebt eine Datei im Finder in einen beliebigen Pfad-basieren URLs, die sich auf die Datei sofort ungültig und müssen aktualisiert werden, um den neuen Pfad. Solange jedoch die Datei an einen anderen Speicherort verschoben auf die gleiche Festplatte, die eindeutige ID nicht ändern und eine Datei-Referenz-URLs gültig bleiben."
https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/AccessingFilesandDirectories/AccessingFilesandDirectories.html
InformationsquelleAutor dougzilla
Wenn Sie wollen grundsätzlich überprüfen, ob ein element eine Datei oder ein Unterverzeichnis:
InformationsquelleAutor Chris Amelinckx
Kürzlich kämpfte mit diesem bei der Handhabung ein array von urls, egal, ob es ein Verzeichnis ist oder nicht (zB. drag-and-drop). Endete mit dieser Erweiterung im swift 4, die von nutzen sein können
InformationsquelleAutor Joe Maher
Vermeiden, die auf URLs verweisen, während Sie haben einige Vorteile, wie oben erwähnt, fressen die Systemressourcen und wenn Sie das aufzählen einer großen Dateisystem (nicht, dass die große eigentlich) Ihre app treffen wird ein system Wand schnell und Herunterfahren von macOS.
InformationsquelleAutor David Hitchen
meine zwei cents von zuvor anwers.. mehr swifty und mit Optionen:
InformationsquelleAutor ingconti