2012-01-28 105 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你缺少格式說明%@