0

我在单个卷上递归了一个文件夹,并检索了文件名、引用计数和 inode 编号的列表,使用

NSFileManager 属性OfItemAtPath

和 NSDictionary fileSystemFileNumber 和 objectForKey:NSFileReferenceCount

出于某种原因,我得到的结果是引用计数为 10,但列表中有超过 10 个具有相同 iNode 编号的文件。

值得注意的是,我的列表中没有包含 SymLink,我只在 [dict fileType] == NSFileTypeRegular 时记录文件

任何想法为什么会这样?

编辑:@Peter Hosey,我正在编写 iNode 和引用计数,如下所示:

CLMFileManagedObj *clmf;
clmf = (CLMFileManagedObj *)[NSEntityDescription insertNewObjectForEntityForName:@"CLMFile" inManagedObjectContext:moc];

NSUInteger fsfn = [dict fileSystemFileNumber];
[clmf setValue:[NSNumber numberWithUnsignedInteger:fsfn] forKey:@"iNodeNumber"];
[clmf setValue:(NSNumber*)[dict objectForKey:NSFileReferenceCount] forKey:@"referenceCount"];

请注意,iNodeNumber 和 referenceCount 的编写方式略有不同的原因是 [dict] 提供了直接 (NSUInteger)fileSystemFileNumber 获取方法,而 fileReferenceCount 需要使用键检索(根据我在 NSDictionary 上可以找到的任何帮助)

CLMFile 实体的两个属性都是 Int 64。据我所知,NSUInteger 的类型取决于运行 32 位还是 64 位模式,但是 [NSNumber numberWithUnsignedInteger] 接受 NSUInteger 作为参数,所以我假设它处理数字在任一模式下正确。

我在活动监视器中看不到它是否是 32/64 位的。我假设 XCode 3.1.3 项目的默认设置是什么。

我可能在这里遗漏了一些东西,因为我对 Mac/Obj-C/XCode/Cocoa 比较陌生,所以任何帮助/指针将不胜感激。经验丰富的程序员,但不在这种环境中(尽管我学习得尽可能快......)

4

1 回答 1

1

您在查看 Time Machine 备份吗?是否涉及目录硬链接?

如果目录 A 包含硬链接的目录 B1 和 B2,则具有相同 inode 的文件将在 B1 和 B2 中,但引用计数可能为 1。

于 2009-08-26T07:04:55.613 回答