我正在使用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。
任何帮助都将受到高度赞赏。
答案 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];