【问题标题】:Is there any function to retrieve the path associated with an NSFileSystemFileNumber?是否有任何函数可以检索与 NSFileSystemFileNumber 关联的路径?
【发布时间】:2015-07-23 08:03:09
【问题描述】:

我正在编写一个实用程序,它遍历 Cocoa 上的目录树并尝试检测自该目录上次与备份位置同步以来发生的更改。

当我最初同步文件和文件夹时,我获取 NSFileSystemFileNumber 并将其存储在该文件或文件夹的数据库记录中:

 NSString *oldFilePath = /* ... */;
 NSError *error = nil;
 NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:oldFilePath error:&error];
 /* set database record for oldFilePath to [attributes fileSystemFileNumber] */

当我遇到新文件或文件夹时,我首先使用 NSFileSystemFileNumber 进行数据库查找以找到原始文件(如果有)。

但如果文件已编辑并从父目录移动到子目录,并且我正在尝试检测对父目录的更改,我希望能够使用保存的 NSFileSystemFileNumber 来识别新的路径,以便我可以区分移动和删除和更新。

任何替代解决方案来解决这个问题?

任何帮助表示赞赏..!!

【问题讨论】:

    标签: objective-c xcode cocoa cocoa-touch nsfilemanager


    【解决方案1】:

    没有直接的方法可以做到这一点。 NSFileSystemFileNumber 只是文件的inode。我可以有多个目录条目,在多个目录中,指向同一个 inode - 即一个文件可以出现在多个地方,并且在这些地方有不同的名称。所以从 inode 到路径的映射不是一对一的,它可能会产生路径的集合。

    您会发现问题的典型解决方案是使用命令 find(1) 或库函数(例如 fts 系列)来遍历文件系统并生成映射。但是,对于您的情况,听起来您的数据库应该可以通过 inode 编号进行搜索,您已经存储在记录中,因此您无需每次都遍历树来生成映射。

    HTH

    【讨论】:

    • 感谢您的努力,能否请您详细说明如何使用 find(1) OR fts 函数??
    • @jgs - find 是一个命令,记录在手册的第 1 部分(终端中的man,或者只是搜索 Xcode 帮助)。有多种方法可以从 Objective-C 调用命令,例如NSTask。同样,fts 是手册第 3 节中记录的一组 C 函数。阅读文档,选择一个并编写一些代码,如果您遇到困难,请提出另一个问题,有人可能会提供帮助。
    猜你喜欢
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 2019-08-22
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多