2010-02-08 25 views
12

làm cách nào để có được kích thước của thư mục NSCachesDirectory tức là/Library/Cache. tôi muốn biết kích thước của thư mục này để cuối cùng tôi có thể xóa nó.kích thước của NSCachesDirectory trong iphone

cảm ơn.

Chỉnh sửa: đây là mã của tôi.

NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:folderPath error:&error]; 
if (attributes != nil) { 

    if (fileSize = [attributes objectForKey:NSFileSize]) { 
     NSLog(@"size of :%@ = %qi\n",folderPath, [fileSize unsignedLongLongValue]); 
    } 

} 

khi tôi chạy này nó mang lại cho kích thước tập tin của tôi 768 (không biết byte hoặc KB) và tôi kiểm tra trong công cụ tìm nó cho tôi thấy kích thước 168KB thư mục. tôi không biết whats sai.

Trả lời

11

giống như sau sẽ giúp bạn bắt đầu:

- (unsigned long long int) cacheFolderSize { 
    NSFileManager *_manager = [NSFileManager defaultManager]; 
    NSArray *_cachePaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
    NSString *_cacheDirectory = [_cachePaths objectAtIndex:0]; 
    NSArray *_cacheFileList; 
    NSEnumerator *_cacheEnumerator; 
    NSString *_cacheFilePath; 
    unsigned long long int _cacheFolderSize = 0; 

    _cacheFileList = [_manager subpathsAtPath:_cacheDirectory]; 
    _cacheEnumerator = [_cacheFileList objectEnumerator]; 
    while (_cacheFilePath = [_cacheEnumerator nextObject]) { 
     NSDictionary *_cacheFileAttributes = [_manager fileAttributesAtPath:[_cacheDirectory stringByAppendingPathComponent:_cacheFilePath] traverseLink:YES]; 
     _cacheFolderSize += [_cacheFileAttributes fileSize]; 
    } 

    return _cacheFolderSize; 
} 

EDIT

Giá trị trả lại sẽ được tính theo byte: x http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html#//apple_ref/doc/c_ref/NSFileSize

Giả sử bạn đang chạy ứng dụng này trong Trình mô phỏng, Trình tìm kiếm có thể báo cáo việc sử dụng các khối tệp cho các byte đó. Những khối đó sẽ nhất thiết phải lớn hơn chính dữ liệu tệp. Đọc trên hệ thống HFS + để tìm hiểu về các khối: http://en.wikipedia.org/wiki/HFS_Plus

Tôi không chắc chắn hệ thống tệp nào được sử dụng trên iPhone hoặc kích thước khối tệp trên thiết bị, vì vậy tổng số byte sẽ là tương tự, việc sử dụng đĩa thực tế có thể khác nhau giữa Trình mô phỏng và thiết bị.

+0

Cảm ơn Alex, tôi đã thêm mã mẫu của tôi, có cách nào tôi có thể nhận được nó mà không liệt kê tất cả các tệp? – Nnp

+0

Tôi không biết. Nếu hiệu suất là một vấn đề, bạn có thể liệt kê một lần khi khởi động và duy trì một biến cá thể cho kích thước thư mục bộ nhớ cache khi các mục được thêm và xóa. –

+0

Hoặc bạn có thể thực hiện điều này trong một chủ đề nền như Rob Napier gợi ý. –

1

Bạn có thực sự muốn nói/Library/Cache hay ý bạn là ~/Library/Cache (thư mục bộ nhớ cache của ứng dụng). Bạn thường không có quyền kiểm soát trước đây, vì vậy tôi sẽ giả sử bạn có nghĩa là sau này.

Sử dụng NSFileManager's -enumeratorAtPath: để đi bộ thư mục và sử dụng -attributesOfItemAtPath: lỗi: để tìm nạp tệpSize. Tôi khuyên bạn nên làm điều này từ từ trên một chuỗi nền để tránh chặn ứng dụng của bạn.

+0

Cảm ơn Rob, tôi đã thêm mã mẫu của mình, tôi không biết liệu nó có đúng hay sai? – Nnp

+0

Rất kỳ quặc, thư mục bộ nhớ cache hệ thống (/ var/mobile/Library/Caches) có thể truy cập được bằng các ứng dụng của App Store. – rpetrich

+0

Mã của bạn ở trên là cho kích thước của mục thư mục chính nó (768 byte). Đây là không gian được sử dụng để theo dõi những gì nằm trong thư mục, không phải khoảng trống được các mục trong thư mục yêu cầu. Bạn cần phải thực sự đi qua tất cả các mục và thêm kích thước của chúng, như trong mã của Alex. –

Các vấn đề liên quan