Получить размер файла с указанием пути - PullRequest
2 голосов
/ 02 января 2012

Я новичок в объективе-c. У меня есть путь к файлу, содержащемуся в NSString, и я хочу получить размер файла. Я нашел этот пример и изменил устаревший код с помощью attributeOfItemAtPath: 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];

Ответы [ 5 ]

4 голосов
/ 02 января 2012

Это должно работать:

uint64_t fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:_filePath error:nil] fileSize];

Это очень похоже на тот, который вы используете, но в вашем есть ошибка: вы ставите NULL вместо nil в обработке error:.

Не забудьте также расширить тильду на своем пути, как описано в документации : используйте stringByExpandingTildeInPath, поэтому ваш NSString *path должен выглядеть примерно так:

NSString *path = [[NSString stringWithString:@"~/Library/Safari/History.plist"] stringByExpandingTildeInPath];

Здесь вы можете найти некоторые пояснения о разнице между nil и NULL.

1 голос
/ 02 января 2012

Ваш путь всегда будет неверным из-за глупой ошибки в вашем коде.

Изменение

if (fileSize == [fileAttributes objectForKey:NSFileSize]) {

до

if (fileSize = [fileAttributes objectForKey:NSFileSize]) {

Надеюсь, дальнейших объяснений не потребуется.

1 голос
/ 02 января 2012

Вы можете получить размер:

NSDictionary * properties = [[NSFileManager defaultManager] attributesOfItemAtPath:yourFilePath error:nil];
NSNumber * size = [properties objectForKey: NSFileSize];

size - это NSNumber, который содержит long без знака.

1 голос
/ 02 января 2012

Возможно, вам потребуется расширить путь, используя:

 - (NSString *)stringByExpandingTildeInPath
0 голосов
/ 02 января 2012

Используйте метод класса defaultManager в NSFileManager вместо создания собственного экземпляра.Кроме того, не включайте символ ~ (тильда) в путь к файлу.Используйте функцию NSHomeDirectory(), чтобы получить домашний каталог.Вот пример:

NSString *path = [NSString stringWithFormat:@"%@/Library/Safari/History.plist", NSHomeDirectory()];
[[[NSFileManager defaultManager] attributesOfItemAtPath:path error:nil] fileSize];

Это должно вернуть размер вашего файла.

...