如何計算文件夾大小?

計算一個文件夾的大小,首先你要知道你想計算的是哪個文件夾的大小。

所以第一步,你要知道你的文件夾路徑。

文件路徑一般固定,所以可用宏來寫,例如:

#define SUNCustomCacheFile [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"Custom"]

那么我現在取得了文件夾的地址,如何計算這個文件的大小呢?(這里有一點需要說明,文件大小指的是什么呢?其實文件夾的大小指的是對于文件夾內的所有文件的總大小)

我們取得的文件夾路徑是一個字符串,想要取得這個路徑下文件夾的大小,我們考慮是不是把取得大小的方法寫到字符串的分類里更加便捷呢?答案是肯定的。

所以第二步,我們要創建NSString的分類。

在.h里聲明方法,例如:

- (unsigned long long)fileSize;

在.m里面實現。那么如何實現呢?

首先文件管理者是不可少的:

NSFileManager *mgr = [NSFileManager defaultManager];

其次判斷路徑是否存在(這里需要注意,我們傳的參數不是BOOL,而是BOOL*。為什么呢?從語法角度,參數需要的是一個指向BOOL類型的指針。另外只有將變量地址傳進去,方法內部才能根據變量地址的值找到存儲空間,把結果值傳進去。所以這個方法其實有兩個返回值。):

// 是否為文件夾

BOOL isDirectory = NO;

BOOL exists = [mgr fileExistsAtPath:self isDirectory:&isDirectory];

如果是文件夾,則要獲取全部的文件路徑(這里需要說一下,這里的路徑是去掉我們已經獲取的文件夾路徑的,后面的路徑):

NSDirectoryEnumerator *enumerator = [mgr enumeratorAtPath:self];

然后遍歷所有的文件的子路徑:

for (NSString *subpath in enumerator)

獲取所有文件路徑的全路徑:

NSString *fullSubpath = [self stringByAppendingPathComponent:subpath];

累加所有的文件大小(這里其實又用到了.fileSize方法,但是這個方法并不是我們所寫的字符串的分類的方法,并且也不是字符串去調用的.fileSize方法。這里是):

size += [mgr attributesOfItemAtPath:fullSubpath error:nil].fileSize;

從這里我們就要寫,不是文件夾的路徑要怎么計算文件的大小了:

size = [mgr attributesOfItemAtPath:self error:nil].fileSize;


代碼示例:

- (unsigned long long)fileSize

{

// 總大小

unsigned long long size = 0;

// 文件管理者

NSFileManager *mgr = [NSFileManager defaultManager];

// 是否為文件夾

BOOL isDirectory = NO;

// 路徑是否存在

BOOL exists = [mgr fileExistsAtPath:self isDirectory:&isDirectory];

if (!exists) return size;

if (isDirectory) { // 文件夾

// 獲得文件夾的大小? == 獲得文件夾中所有文件的總大小

NSDirectoryEnumerator *enumerator = [mgr enumeratorAtPath:self];

for (NSString *subpath in enumerator) {

// 全路徑

NSString *fullSubpath = [self stringByAppendingPathComponent:subpath];

// 累加文件大小

size += [mgr attributesOfItemAtPath:fullSubpath error:nil].fileSize;

}

} else { // 文件

size = [mgr attributesOfItemAtPath:self error:nil].fileSize;

}

return size;

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1、禁止手機睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa閱讀 1,144評論 1 6
  • 1、改變 UITextField 占位文字 顏色和去掉底部白框 [_userName setValue:[UICo...
    i_MT閱讀 1,065評論 0 2
  • 計算緩存大小。 在字符串分類中暴露兩個方法:1個是計算大小,1個是根據大小分類。 方法實現 - (NSIntege...
    小破孩丫閱讀 497評論 0 2
  • 去年此時和朋友一起去同濟看櫻,已是黃昏時分,太陽在西邊的天空墜著,橘黃的光灑在臉頰上,暖暖的。 這是放...
    啰哩八索的鳳鳳閱讀 280評論 0 0
  • 概述在iOS開發中UITableView可以說是使用最廣泛的控件,我們平時使用的軟件中到處都可以看到它的影子,類似...
    liudhkk閱讀 9,093評論 3 38