8

我做了这个函数,它返回文档目录中文件的大小,它可以工作,但我收到警告,我希望修复,函数:

-(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: is deprecated first deprecated in ios 2.0'。这是什么意思,我该如何解决?

4

2 回答 2

9

在大多数情况下,当您收到有关已弃用方法的报告时,您会在参考文档中查找它,它会告诉您要使用什么替代方法。

fileAttributesAtPath:traverseLink: 返回一个字典,描述给定文件的 POSIX 属性。(在 iOS 2.0 中已弃用。使用 attributesOfItemAtPath:error: 代替。)

所以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'
}

编辑:如果您不知道deprecated的含义,则表示该方法或类现在已过时。您应该使用更新的 API 来执行类似的操作。

于 2012-11-08T16:18:24.370 回答
2

接受的答案忘记traverseLink:YES从问题中处理。

一个改进的答案是同时使用attributesOfItemAtPath:error:and stringByResolvingSymlinksInPath

NSString *fullPath = [getFilePath stringByResolvingSymlinksInPath];
NSDictionary *fileDictionary = [[NSFileManager defaultManager] attributesOfItemAtPath:fullPath error:nil];
于 2015-11-11T18:13:48.000 回答