我正在编写一个实用程序,它在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来识别新的路径,以便我可以区分移动和删除并更新。
解决这个问题的任何其他解决方案?
任何帮助都表示赞赏.. !!
答案 0 :(得分:1)
没有直接的方法可以做到这一点。 NSFileSystemFileNumber
只是文件的 inode 。在多个目录中可以有多个目录条目到同一个inode - 即一个文件可以出现在多个地方,并且在这些地方有不同的名称。因此,从inode到path的映射不是一对一的,它可能会产生一组路径。
您将发现问题的典型解决方案是使用命令find(1)
或库函数(如fts
系列)来遍历文件系统并生成映射。但是对于您的情况,听起来您的数据库应该可以通过inode编号进行搜索,这是您已经存储在记录中的内容,因此您不需要每次都使用树来生成映射。
HTH