【问题标题】:folder size wrong文件夹大小错误
【发布时间】:2012-02-22 07:14:02
【问题描述】:

此代码正确,但文件夹大小错误。如果我更改目录,大小总是错误的。例如“%@/Caches/com.apple.Safari/Webpage Previews”的大小是 23 MB,但我有 16.5 KB。

NSString *path = [NSString stringWithFormat:@"%@/Caches/com.apple.Safari/Webpage Previews", [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]];
    NSNumber *fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:path error:nil] objectForKey:NSFileSize];
    resultsize += [fileSize unsignedLongLongValue];

我也用过这个,但大小总是错误的:

NSFileManager *fm = [[NSFileManager alloc] init];    
    NSURL *LibraryURL = [[fm URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject];
    NSURL *previewsURL = [LibraryURL URLByAppendingPathComponent:@"Caches/com.apple.Safari/Webpage Previews"];

    resultSize += [[[fm attributesOfItemAtPath:[previewsURL path] error:nil] objectForKey:NSFileSize] unsignedIntegerValue];

你能帮帮我吗? 谢谢。

【问题讨论】:

  • 我喜欢任何以以下开头的帖子:这段代码是正确的,但其他一切都是错误的。

标签: objective-c macos size osx-lion


【解决方案1】:

如果要获取文件夹中所有文件的大小,则需要遍历文件夹的内容并获取实际文件的大小:

unsigned long long totalSize = 0;
NSFileManager *fm = [[NSFileManager alloc] init];
NSURL *libraryURL = [[fm URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject];
NSURL *previewsURL = [LibraryURL URLByAppendingPathComponent:@"Caches/com.apple.Safari/Webpage Previews"];

NSDirectoryEnumerator *enumerator = [fm enumeratorAtURL:previewsURL includingPropertiesForKeys:[NSArray arrayWithObject:NSURLFileSizeKey] options:0 errorHandler:nil /* or an actual error handler */];

for (NSURL *url in enumerator) {
    NSNumber *sizeNumber;
    if ([url getResourceValue:&sizeNumber forKey:NSURLFileSizeKey error:nil /* or an error */])
        totalSize += [sizeNumber unsignedLongLongValue]; 
}

(我没有测试过。)

【讨论】:

  • 好的,解决了!谢谢!添加 resultSize += [[[fm attributesOfItemAtPath:[previewsURL path] error:nil] objectForKey:NSFileSize] unsignedIntegerValue];
【解决方案2】:

Lion 对这些累积大小有某种缓存。试一试服务器卷(Mac OS X Lion Server AFP):

  • 打开一个包含很多子文件夹的文件夹
  • 菜单视图 > 作为列表
  • 菜单视图 > 排列方式 > 大小
  • Finder 显示“---”组中的所有子文件夹
  • 菜单视图 > 显示视图选项
  • 选中“计算所有文件大小”复选框
  • 现在 Finders 对子文件夹进行适当的分组
  • 即使您关闭该窗口,断开服务器并重新连接,这些尺寸也会更快,而且在不按尺寸排列时也可以

-> 这些信息存储在哪里?使用哪个 API?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    相关资源
    最近更新 更多