2012-01-28 7 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

なぜあなたは符号なしlong longにダブル追加するに要求されるように特定のフォルダを表示するように更新しましたか! – jrtc27

+0

私は初心者です。 [fileSize doubleValue]にはdoubleValueを指定しないでください。コードは機能しません。私は何を書くことができますか? – Joannes

+0

さて、 'unsigned long long'に追加すると、' fileSize unsignedLongLongValue]; ' – jrtc27

答えて

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環境用です。

私は可能な限りNSStringファイルパスの代わりにNSURLを使用しています。また、検索パスでユーザーの名前をハードコードする必要もありません。

はコメント

+0

私は初心者です。 NSUserDomainMaskは問題ですか?このディレクトリ "%@/Caches/com.apple.Safari/Webpage Previews"であなたの提案を使ってコードを変更するにはどうすればよいですか? – Joannes

+0

@Joannes - 私は自分の答えを更新しました。アイデアは、システムフォルダを取得し、必要に応じてドリルダウンすることです。 – Abizern

+2

コードは機能しますが、サイズが間違っています。このフォルダ "/Caches/com.apple.Safari/Webpage Previews"は23Mbですが、NSLogの表示は3.1Kbです。私のコードと同じ問題、サイズが間違っています。私はどこに問題があるのか​​分からない。 – Joannes

0

あなたは書式指定子%@が欠落しているstringWithFormat

関連する問題