2012-01-28 111 views
0

使用此代码我确定文件大小,如果复选框为NSOnState,但文件夹值始终为0.该目录是正确的。 你能帮我吗?确定文件夹大小

unsigned long long resultsize=0; 
if(imagehistoryS.state == NSOnState) { 
    NSString *path = [NSString stringWithFormat:@"Users/Giovanni/Desktop/test", [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]];  
    NSNumber *fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:path error:nil] objectForKey:NSFileSize]; 
    resultsize += [fileSize doubleValue]; 
} 
[result setStringValue:[NSString stringWithFormat:@"Total size items selected: %f", resultsize]]; 
+0

你为什么要添加一倍,为unsigned long long请求的特定文件夹? – jrtc27 2012-01-28 09:52:54

+0

我是初学者。在[fileSize doubleValue]中没有doubleValue;该代码不起作用。我可以写什么? – Joannes 2012-01-28 10:33:23

+0

好吧,当你将它添加到'unsigned long long'时,你应该使用'fileSize unsignedLongLongValue];' – jrtc27 2012-01-28 13:02:53

回答

1

您正在传递字符串,但尚未指定NSUserDomainMask。我试过这个,它的工作原理。

NSUInteger resultSize = 0; 

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

NSLog(@"Size: %lu", resultSize); 

这是用于ARC环境。

请注意,我尽可能使用NSURL而不是NSString文件路径。另外,您不需要在搜索路径中对用户的名称进行硬编码。

更新以显示作为评论

+0

对不起,我是初学者。 NSUserDomainMask是问题吗?如何使用此目录中的建议修改我的代码“%@/Caches/com.apple.Safari/Webpage Previews”? – Joannes 2012-01-28 10:24:29

+0

@Joannes - 我已经更新了我的答案。这个想法是获取系统文件夹,然后按需要钻取。 – Abizern 2012-01-28 10:34:08

+2

该代码有效,但大小错误。此文件夹“/Caches/com.apple.Safari/Webpage Previews”是23Mb,但在NSLog中显示为3.1Kb。与我的代码相同的问题,大小错误。我不知道问题在哪里。 – Joannes 2012-01-28 14:53:16

0

在你stringWithFormat你缺少格式说明%@