2009-08-25 1 views
0

私は、単一のボリューム上のフォルダを再帰、および参照カウントと同じiNodeを持つファイル/ハードリンクがさらに存在するのはなぜですか?

NSFileManager attributesOfItemAtPath

とNSDictionaryのfileSystemFileNumberとobjectForKeyを使用して、ファイル名、参照カウントとiノード番号のリストを取得していますいくつかのためにNSFileReferenceCount

を理由は、参照カウント10などの結果が得られますが、同じiNode番号を持つ10個以上のファイルのリストです。注目すべきは

私は私のリストでシンボリックリンクを含めておりませんということですが、私は場合にのみ、ファイルを記録しています[辞書のfileType] == NSFileTypeRegular

このようなケースかもしれない理由を任意のアイデア?

編集:次のように@Peter Hosey、I iノードと参照カウントを書いている:iNodeNumberとreferenceCountが若干異なる書かれている理由は、[辞書]が直接に提供することであることを

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"]; 

は注意( NSUInteger)fileSystemFileNumber get-method、キーを使用してfileReferenceCountを取得する必要があります(NSDictionaryで見つけることができるヘルプに応じて)

CLMFileエンティティの両方のプロパティはInt64です。実行中の32ビットモードか64ビットモードかに依存しますが、[NSNumber numberWithUnsignedInteger]引数としてNSUIntegerを受け入れるので、どちらのモードでも数値を正しく扱うことができます。

アクティビティモニタのどこに32/64ビットであるかがわかりません。私は、Xcode 3.1.3プロジェクトのデフォルトが何であろうと考えています。

私はMac/Obj-C/XCode/Cocoaに比較的新しいので、ここで何か不足している可能性があります。経験豊富なプログラマーが、この環境ではできません(私はできるだけ早く学習しますが...)

+0

どのようにiノードを印刷していて、アプリが64ビットで動作していますか?後者にはアクティビティモニタを見ても分かります。 –

+0

@Peter:これを見ていただきありがとうございます - 詳細を提供するために質問を更新しました。種類:64ビットモードで動作しているかどうかを判断する方法はまだありません。 – Graza

+0

"Intel"は32ビットです。 「Intel(64ビット)」は64ビットです。あなたのUIにこれらの数字を表示していますか? –

答えて

1

Time Machineのバックアップを検討していますか?ディレクトリハードリンクが含まれていますか?

ディレクトリAにハードリンクされたディレクトリB1とB2が含まれている場合、同じiノードを持つファイルはB1とB2の両方にありますが、参照カウントは1になる可能性があります。

+0

ええと、良い点 - 私はディレクトリのハードリンクがないと仮定していましたが、それを確認します.... – Graza

+0

それは、同じiノードを持つファイルリストの数がrefカウントよりも大きい場合、ファイルが入っていたすべてのフォルダのiノードの数は、ファイルのiノードの参照カウントと同じでした。ありがとう – Graza

関連する問題