2012-02-16 54 views
6

我有下面的代碼我使用緩存的照片我在設備的內存中加載關閉的Flickr:的iOS - 獲取文件大小的總和目錄

NSURL *urlForPhoto = [FlickrFetcher urlForPhoto:self.photo format:FlickrPhotoFormatLarge]; 
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *imagePath = [rootPath stringByAppendingString:[self.photo objectForKey:FLICKR_PHOTO_ID]]; 
NSData *dataForPhoto; 
NSError *error = nil; 
if ([[NSFileManager defaultManager] fileExistsAtPath:imagePath]) { 
    dataForPhoto = [NSData dataWithContentsOfFile:imagePath]; 
} else { 
    dataForPhoto = [NSData dataWithContentsOfURL:urlForPhoto]; 
    [dataForPhoto writeToFile:imagePath atomically:YES]; 
} 

我想這個限制爲10MB,然後如果限制達到刪除緩存中最古老的照片,我怎麼能得到我保存的所有文件的總大小,並檢查哪一個是最古老的?

+0

stanford iOS課程? – Uko 2012-04-24 13:38:30

+0

是的,我必須讓評論更長,這樣我才能回答。 – 8vius 2012-04-24 13:48:18

+0

實際上,計算目錄在磁盤上佔用的大小實際上涉及更多一點。找出如何在[這個答案](http://stackoverflow.com/a/28660040/104790)到一個類似的問題。 – 2015-02-23 08:43:29

回答

9

你可以得到一個文件的大小,像這樣

NSError *attributesError = nil; 

    NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:URL error:&attributesError]; 

    int fileSize = [fileAttributes fileSize]; 

所以,你可以從文件夾中的所有文件可能迭代,並添加了文件大小......不知道那裏有一個直接的方式得到目錄大小,還那裏有這個SO張貼談論這個藏漢,你可以找到一個解決方案here

找到該文件的創建日期,你可以做

NSString *path = @""; 
    NSDictionary* fileAttribs = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:nil]; 
    NSDate *result = [fileAttribs valueForKey:NSFileCreationDate]; //or NSFileModificationDate 

希望它有幫助

+0

真棒Daniel,還有一件事,如何檢查一個目錄是否存在?因爲如果它不存在,我將在文檔目錄中創建一個子目錄 – 8vius 2012-02-16 16:41:48

+0

[NSFileManager defaultManager] itemExistsAtPath應該做的訣竅 – Daniel 2012-02-16 16:43:05

+3

它實際上是fileExistsAtPath,Daniel。現在,你能回答一件事嗎?如果我得到這些屬性並獲取NSFileSize對象,那麼我得到一個很小的數字,如果我在一個文件上調用它,我會得到一個很大的數字(兩個字節都是我假設的),並沒有獲得文件大小目錄給我它裏面的所有文件的總數? – 8vius 2012-02-16 19:24:12

相關問題