获取完整路径或转换为完整路径

时间:2016-11-03 08:48:39

标签: swift file path enumerator

使用时

let directoryEnumerator = FileManager().enumerator(at: ...
在Swift 3中,我从文件夹中获取所有文件,例如

"file:///Volumes/MacOS/fasttemp/Fotos/"

结果不包括前导路径(此处为" / Volumes / MacOS")。所以我得到了

"file:///fasttemp/Fotos/2005/"

如何获取完整路径(直接来自枚举器)或转换它们。我想使用URL函数,而不是通过假设操作字符串函数。

2 个答案:

答案 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