2017-10-07 127 views
0

我正在使用以下代碼將文件夾中特定擴展名的文件添加到數組中。將文件添加到子文件夾中的數組

self.fileArray = try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys: nil).filter{ filterExtensions.contains($0.pathExtension) } 

我需要從所選文件夾/驅動器中的所有子文件夾添加文件。

我該如何做到這一點?

回答

1

你可以得到這樣的:

let enumerator = try FileManager.default.enumerator(at: url, includingPropertiesForKeys: nil)!.allObjects 

self.fileArray = enumerator.filter { filterExtensions.contains(($0 as! URL).pathExtension) } as! [URL] 
+0

將檢查並取回.. – techno

+0

@LeoDabus上述答案正確嗎? – techno

1

你可以得到URL資源鍵isRegularFileKey檢查,如果枚舉網址是一個普通文件。您還可以設置跳過隱藏的文件和包後裔的選項,否則也將複製隱藏文件像.DS_Store:

let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! 
var files: [URL] = [] 
FileManager.default.enumerator(at: documentsDirectory, includingPropertiesForKeys: [], options: [.skipsHiddenFiles, .skipsPackageDescendants])?.forEach { 
    if let url = $0 as? URL, (try? url.resourceValues(forKeys: [.isRegularFileKey]))?.isRegularFile == true { 
     files.append(url) 
    } 
} 

你也可以得到所有的物體從枚舉返回,有條件地扔然後過濾符合條件的網址:

if let files = (FileManager.default.enumerator(at: documentsDirectory, includingPropertiesForKeys: [], options: [.skipsHiddenFiles, .skipsPackageDescendants])?.allObjects as? [URL])? 
    .filter({ 
     (try? $0.resourceValues(forKeys: [.isRegularFileKey]))?.isRegularFile == true 
}) { 
    print(files.count) 
} 
+0

該URL將始終是一個目錄URL ..因爲我只允許在NSOpenPanel中選擇目錄。 – techno

+0

好的................... – techno

+0

另一個問題....我的應用程序處理大量圖像時佔用18GB的內存...我應該明確處理關閉NSImages? – techno

相關問題