2017-10-07 64 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

相关问题