之前遇到用iexplore查看手機上app下面document下有很多文件,但是通過代碼獲取文件大小時一直出錯。
一開始使用
NSString *string = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *tempFileList = [[NSArray alloc] initWithArray:[fileManager contentsOfDirectoryAtPath:string error:nil]];
這種方法一直獲取不到。後來修改爲以下是獲取dcoument目錄下所有文件大小。
NSDirectoryEnumerator
,目錄枚舉類,一個NSDirectoryEnumerator
對象列舉了一個目錄的內容,返回的所有文件在目錄中的路徑名,在該目錄中。這些路徑是相對於目錄而言的。enumeratorAtPath:
這個方法一次可以枚舉指定目錄中的每一個文件. 默認情況下,如果其中一個文件爲包含子文件,那麼也會遞歸的枚舉它的子文件. 該方法返回一個目錄的所有資源列表.
float size = 0;
NSString *path;NSString *DocumentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtPath:DocumentsPath];
for (NSString *fileName in enumerator) {
// NSLog(@"文件名:%@",fileName);
path = [DocumentsPath stringByAppendingPathComponent:fileName];
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:nil];
size=size+(float)[fileAttributes fileSize];
}
//清除dcoument下的文件:
NSString *DocumentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtPath:DocumentsPath];
for (NSString *fileName in enumerator) {
isCLearSuccess = [[NSFileManager defaultManager] removeItemAtPath:[DocumentsPath stringByAppendingPathComponent:fileName] error:nil];
}
//獲取tmp目錄下所有文件大小:
NSString *tmpDir = NSTemporaryDirectory();
NSFileManager* manager = [NSFileManager defaultManager];
if (![manager fileExistsAtPath:tmpDir]) {
cacheSize = [NSString stringWithFormat:@"0 M"];
[self.setTableView reloadSections:[NSIndexSet indexSetWithIndex:2] withRowAnimation:UITableViewRowAnimationNone];
return;
}
NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:tmpDir] objectEnumerator];
NSString* fileName;
long long folderSize = 0;
while ((fileName = [childFilesEnumerator nextObject]) != nil){
NSString* fileAbsolutePath = [tmpDir stringByAppendingPathComponent:fileName];
folderSize += [self fileSizeAtPath:fileAbsolutePath];
}