cocoa NSFileManager文件大小错误

时间:2012-11-25 09:24:38

标签: objective-c macos cocoa nsfilemanager

我正在使用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 <​​/ strong>命令与先前在 myPart.Size

中保存的正确文件大小相同
  

-rw-r - r-- 1 David staff 37189 Nov 25 11:25 part0

     

-rw-r - r-- 1 David staff 37187 Nov 25 11:25 part1

     

-rw-r - r-- 1 David staff 37187 Nov 25 11:25 part2

     

-rw-r - r-- 1 David staff 37187 Nov 25 11:25 part3

     

-rw-r - r-- 1 David staff 37187 Nov 25 11:25 part4

     

-rw-r - r-- 1 David staff 37187 Nov 25 11:25 part5

     

-rw-r - r-- 1 David staff 37187 Nov 25 11:25 part6

     

-rw-r - r-- 1 David staff 37186​​ Nov 25 11:25 part7

我正在使用OS X 10.8和Xcode 4.5。

任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分: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];

感谢大家。

答案 1 :(得分:0)

我认为您应该使用defaultManager和fileSize来计算文件大小。

unsigned long long fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:someFilePath error:nil] fileSize];