1

NSFileManager を使用して、アプリケーション内のいくつかのファイルのサイズを取得しています。

各ファイルは個別のスレッドによって検査され、すべてのファイルの結果は同じ間違った値になります。次のコードは、個別のスレッドでファイルごとに実行されます。

NSFileManager *fileManager= [[NSFileManager alloc] init];
NSUInteger completedFileSize = [[[fileManager attributesOfItemAtPath:fileName error:&error] objectForKey:NSFileSize] unsignedLongValue];
NSLog(@"Part %lu: %@ => size:%lu actual size:%lu", myPart.SequenceNumber, fileName, completedFileSize, myPart.Size);

出力は次のとおりです。

パート 1: /Users/David/TEMP/245E0BF53ECA/part1 => サイズ:36864 実際のサイズ:37187

パート 5: /Users/David/TEMP/245E0BF53ECA/part5 => サイズ:36864 実際のサイズ:37187

パート 2: /Users/David/TEMP/245E0BF53ECA/part2 => サイズ:36864 実際のサイズ:37187

パート 4: /Users/David/TEMP/245E0BF53ECA/part4 => サイズ:36864 実際のサイズ:37187

パート 3: /Users/David/TEMP/245E0BF53ECA/part3 => サイズ:36864 実際のサイズ:37187

パート 6: /Users/David/TEMP/245E0BF53ECA/part6 => サイズ:36864 実際のサイズ:37187

パート 7: /Users/David/TEMP/245E0BF53ECA/part7 => サイズ:36864 実際のサイズ:37186

パート 0: /Users/David/TEMP/245E0BF53ECA/part0 => サイズ:36864 実際のサイズ:37189

また、端末でのls -lコマンドの出力は、以前にmyPart.Sizeに保存された正しいファイル サイズと同じです。

-rw-r--r-- 1 David スタッフ 37189 11 月 25 日 11:25 part0

-rw-r--r-- 1 David スタッフ 37187 Nov 25 11:25 part1

-rw-r--r-- 1 David スタッフ 37187 Nov 25 11:25 part2

-rw-r--r-- 1 David スタッフ 37187 Nov 25 11:25 part3

-rw-r--r-- 1 David スタッフ 37187 11 月 25 日 11:25 part4

-rw-r--r-- 1 David スタッフ 37187 11 月 25 日 11:25 part5

-rw-r--r-- 1 David スタッフ 37187 11 月 25 日 11:25 part6

-rw-r--r-- 1 David スタッフ 37186​​ 11 月 25 日 11:25 part7

OS X 10.8 と Xcode 4.5 を使用しています。

どんな助けでも大歓迎です。

4

2 に答える 2

1

私は実際の問題を見つけました!

ファイルは次の前に閉じられません。

[[[fileManager attributesOfItemAtPath:fileName error:&error] objectForKey:NSFileSize] unsignedLongValue];

そのため、パスのfileName変数に関連付けられているファイル ハンドラーを閉じて、問題を解決しました。

fclose(myFile); //this is the handler for fileName
//now the value returned from the below line is correct.
[[[fileManager attributesOfItemAtPath:fileName error:&error] objectForKey:NSFileSize] unsignedLongValue];

みんなからありがとう。

于 2012-11-25T11:17:46.373 に答える
0

ファイルサイズを計算するには、defaultManager と fileSize を使用する必要があると思います。

unsigned long long fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:someFilePath error:nil] fileSize];
于 2012-11-25T10:33:55.260 に答える