我是Objective-c的新手。 我有一个包含在NSString中的文件路径,我想要获取文件大小。我找到了这个example并使用attributesOfItemAtPath更改了已弃用的代码:error:但路径始终无效。
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSString *path = @"~/Library/Safari/History.plist";
NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath: path error: NULL];
if (fileAttributes != nil) {
NSNumber *fileSize;
if (fileSize == [fileAttributes objectForKey:NSFileSize]) {
NSLog(@"File size: %qi\n", [fileSize unsignedLongLongValue]);
}
}
else {
NSLog(@"Path (%@) is invalid.", pPath);
}
[NSFileManager release];
答案 0 :(得分:4)
这应该有效:
uint64_t fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:_filePath error:nil] fileSize];
它与您使用的非常相似,但是在您的错误中:您在NULL
处理中放置了nil
而不是error:
。
请确保在路径中展开代字号,如documentation中所述:使用stringByExpandingTildeInPath
,因此您的NSString *path
应该是这样的:
NSString *path = [[NSString stringWithString:@"~/Library/Safari/History.plist"] stringByExpandingTildeInPath];
Here您可以找到有关nil
和NULL
之间差异的一些解释。
答案 1 :(得分:1)
您可能需要使用以下方法展开路径:
- (NSString *)stringByExpandingTildeInPath
答案 2 :(得分:1)
你可以通过以下方式获得尺寸:
NSDictionary * properties = [[NSFileManager defaultManager] attributesOfItemAtPath:yourFilePath error:nil];
NSNumber * size = [properties objectForKey: NSFileSize];
size是包含无符号长long的NSNumber。
答案 3 :(得分:1)
由于代码中存在超级愚蠢的错误,您的路径始终无效。
更改
if (fileSize == [fileAttributes objectForKey:NSFileSize]) {
到
if (fileSize = [fileAttributes objectForKey:NSFileSize]) {
我希望不需要进一步解释。
答案 4 :(得分:0)
在NSFileManager上使用defaultManager
类方法,而不是创建自己的实例。此外,请勿在文件路径中包含~
(代字号)符号。使用NSHomeDirectory()
函数来获取主目录。这是一个例子:
NSString *path = [NSString stringWithFormat:@"%@/Library/Safari/History.plist", NSHomeDirectory()];
[[[NSFileManager defaultManager] attributesOfItemAtPath:path error:nil] fileSize];
这应该返回文件的大小。