首页 > 解决方案 > 如何在iOS中比较两个同名文件以检查它们是同一文件的副本还是不同文件的副本

问题描述

我正在使用 UIDocument 将文档文件保存到 Documents 目录中的本地存储沙箱中。我在 iCloud 中有另一个同名文件。如何检查这两个文件是同一个文档文件的副本还是两个同名的不同文档文件?

使用 NSFileVersion 不会告诉我它们是否是同一个文件,只是它是什么版本的文件。

我尝试获取文件的资源值,但本地存储沙箱中的文件给我 nil 作为文档标识符。

下面是使用 documentIdentifier 资源值的代码:

    let localFileResourceValues = try? self.document!.fileURL.resourceValues(forKeys: [URLResourceKey.documentIdentifierKey])

    let iCloudFileResourceValues = try? destinationURL.resourceValues(forKeys: [URLResourceKey.documentIdentifierKey])

    print("documentIdentifier", localFileResourceValues?.documentIdentifier as Any, iCloudFileResourceValues?.documentIdentifier as Any, localFileResourceValues?.documentIdentifier == iCloudFileResourceValues?.documentIdentifier)

打印结果:

documentIdentifier nil 可选(133819) false

是否可以从本地存储沙箱中的文件中获取 NSMetadataItem?

我将不胜感激任何帮助。

标签: iosfilesystemsicloud

解决方案


要确定两个文件路径是否指向同一个文件对象,您需要使用 规范化文件路径NSString stringByStandardizingPath,然后使用 解析符号链接NSString stringByResolvingSymlinksInPath:,然后比较路径。这个网页有一个很好的描述和现成的代码。

找出两个文件是否具有相同的内容,即使它们可能是不同的文件对象,NSFileManager contentsEqualAtPath:andPath:这很有用。


推荐阅读