Ich versuche herauszufinden, wie bereitgestellte Volumes (sie sind an einen Server angeschlossen, und sie sind über afp: // auf meiner Arbeitsstation montiert) und wählen Sie bestimmte Dateitypen und Geben Sie den Pfad, den Dateinamen und die Asset-ID in eine CSV-Datei ein. Die Asset-ID besteht aus den letzten 10 Ziffern des Dateinamens, denen ein "_" vorangestellt ist (Beispiel: afilename_1234567890.mov) Einige Dateien haben keine Asset-ID (ich ignoriere) und einige Dateien haben mehrere "." (zum Beispiel afilename_videofile_23.98_prores_1234567890.mov). Ich kann die Volumes bekommen, die ich brauche (weniger ein Zeitmaschinensicherheitslaufwerk), aber zu versuchen, nach den Dateien zu suchen, ist lästig. Ich habe ein verschiedenes Beispiel angeschaut und die Apple FileManager Dokumentation studiert, aber es gibt nichts Konkretes.Traversed montierten Volumes, um bestimmte Dateitypen zu finden
Ich habe die folgende Routine zu tun, was ich brauche, aber mit der Linie, Let Enumerator = FileManager.enumerator (atPath: url.path)!, Enumerator ist immer leer.
Entweder mache ich eine schlechte Annahme oder ich vermisse definitiv etwas Entscheidendes.
func FindFilesWithAssetIDs() {
// Find all the mounted volumes
let keys: [URLResourceKey] = []
let volumes = FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: keys, options: [])!
var count = 0
var volumeCount = volumes.count
var volumeItem = 0
let filterExtensions = ["mxf", "mov", "mp4", "scc", "cap", "srt", "txt", "rtf", "wav", "mp3", "m2v", "aif"]
// Scan all the mounted volumes, one at a time
for url in volumes {
let components = url.pathComponents
if components.count > 1 && components[1] == "Volumes" {
if components[2] == "Time Machine Backup" { continue } // Check if the volume is the staff backup disk. If it is, move on to the next volume
guard let volumeTypeKey = try? url.resourceValues(forKeys: [.volumeIsLocalKey]) else { return } // Make sure we are scanning the volumes and not any local folders like /private
let volumeType: Bool = volumeTypeKey.volumeIsLocal!
if volumeType == false {
let fileManager = FileManager.default
let enumerator = fileManager.enumerator(atPath: url.path)!
while let element = enumerator.nextObject() as? String {
if element.hasSuffix("mxf") || element.hasSuffix("mov") { // a test. I would much rather use a filterExtension method or a switch statement
// do something
count += 1
}
}
NSLog(url.path, " ", String(count))
// NSLog(url.path)
}
}
volumeItem += 1
}
}
Jede Hilfe würde sehr geschätzt werden.
Duh !! ... Der Schalter "App Sandbox" wurde aus irgendeinem Grund eingeschaltet, wodurch mein Code nicht auf die Netzwerkvolumes zugreifen konnte. Also, wie kann ich die Variable "Element" filtern, die mit "." (unsichtbare Dateien) und gibt es eine bessere Möglichkeit, Dateien mit der Variablen "filterExtensions" zu filtern? Danke –
user1462486
die Annahme der Antworten auf Ihre vorherigen Fragen würde mich sehr ermutigen, eine detailliertere Antwort zu geben :-) –