使用时
let directoryEnumerator = FileManager().enumerator(at: ...
在Swift 3中,我从文件夹中获取所有文件,例如
"file:///Volumes/MacOS/fasttemp/Fotos/"
结果不包括前导路径(此处为" / Volumes / MacOS")。所以我得到了
"file:///fasttemp/Fotos/2005/"
如何获取完整路径(直接来自枚举器)或转换它们。我想使用URL函数,而不是通过假设操作字符串函数。
答案 0 :(得分:2)
如果" MacOS"是当前启动盘的名称然后" / Volumes / MacOS"是" /"的象征性链接,所以" / fasttemp / Fotos / 2005 /"和" / Volumes / MacOS / fasttemp / Fotos /"是同一文件的绝对路径。
为了获得唯一的文件名表示,您可以查询 其规范路径的URL。例如:
if (assoc >= 1)
{
set *s = malloc(new->numSets * sizeof(set));
new->sets = s;
for (int x=0; x < new->numSets; x++)
{ // for each set
new->sets[x].blks = malloc(assoc * sizeof(block));
new->sets[x].alg = alg;
new->sets[x].numBlocks = assoc;
for (int y=0; y < assoc; y++)
{
new->sets[x].blks[y].valid = -1;
new->sets[x].blks[y].tag = NULL;
}
}
}
这需要macOS 10.12 / iOS 10或更高版本。在较旧的系统上,您可以
使用let url = URL(fileURLWithPath: "/Volumes/MacOS/Applications/Utilities/")
if let cp = (try? url.resourceValues(forKeys: [.canonicalPathKey]))?.canonicalPath {
print(cp)
}
// Output: "/Applications/Utilities"
系统调用:
realpath()
答案 1 :(得分:0)
请注意,您希望尽可能URL
使用import Foundation
let manager = FileManager.default
// Get URL for the current user’s Documents directory
// Use URL instead of path, it’s more flexible and preferred
if let documents = manager.urls(for: .documentDirectory, in: .userDomainMask).first,
// Get an Enumerator for the paths of all the objects in the directory
// but do not descend into directories or packages
let directoryEnumerator = manager.enumerator(at: documents, includingPropertiesForKeys: [URLResourceKey.pathKey], options: [.skipsSubdirectoryDescendants, .skipsPackageDescendants]) {
// iterate through the objects (files, directories, etc.) in the directory
for path in directoryEnumerator {
print(path)
}
}
:
URL对象是引用本地文件的首选方式。最 从文件读取数据或将数据写入文件的对象具有方法 接受NSURL对象而不是路径名作为文件引用。
以下是如何从目录中获取所有对象的示例:
DoubleDocValuesField