我做了这个函数,它返回文件目录中文件的大小,它可以工作,但我得到警告,我希望修复,函数:
-(unsigned long long int)getFileSize:(NSString*)path
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *getFilePath = [documentsDirectory stringByAppendingPathComponent:path];
NSDictionary *fileDictionary = [[NSFileManager defaultManager] fileAttributesAtPath:getFilePath traverseLink:YES]; //*Warning
unsigned long long int fileSize = 0;
fileSize = [fileDictionary fileSize];
return fileSize;
}
*警告是'fileAttributesAtPath:traverseLink:在ios 2.0中首先弃用的'。它是什么意思以及如何解决它?
答案 0 :(得分:9)
在大多数情况下,当您收到有关已弃用方法的报告时,您可以在参考文档中查找它,它会告诉您要使用的替代方法。
<强> fileAttributesAtPath:traverseLink:强> 返回一个字典,该字典描述在给定时指定的文件的POSIX属性。 (在iOS 2.0中不推荐使用。使用attributesOfItemAtPath:错误:代替。)
所以请改用attributesOfItemAtPath:error:
。
这是一个简单的方法:
NSDictionary *fileDictionary = [[NSFileManager defaultManager] attributesOfItemAtPath:getFilePath error:nil];
更完整的方式是:
NSError *error = nil;
NSDictionary *fileDictionary = [[NSFileManager defaultManager] attributesOfItemAtPath:getFilePath error:&error];
if (fileDictionary) {
// make use of attributes
} else {
// handle error found in 'error'
}
编辑:如果您不知道不赞成的含义,则意味着该方法或类现在已过时。您应该使用较新的API来执行类似的操作。
答案 1 :(得分:2)
接受的答案忘记了处理问题的traverseLink:YES
。
改进的答案是同时使用attributesOfItemAtPath:error:
和stringByResolvingSymlinksInPath
:
NSString *fullPath = [getFilePath stringByResolvingSymlinksInPath];
NSDictionary *fileDictionary = [[NSFileManager defaultManager] attributesOfItemAtPath:fullPath error:nil];