Как получить размер файла с указанием пути? - PullRequest
67 голосов
/ 02 мая 2009

У меня есть путь к файлу, содержащемуся в строке NSString. Есть ли способ получить его размер файла?

Ответы [ 9 ]

133 голосов
/ 06 марта 2011

Этот лайнер может помочь людям:

unsigned long long fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:someFilePath error:nil] fileSize];

Возвращает размер файла в байтах.

74 голосов
/ 10 ноября 2009

Имейте в виду, что fileAttributesAtPath: traverseLink: устарело с Mac OS X v10.5. Вместо этого используйте attributesOfItemAtPath:error:, как описано в том же URL-адресе *, который упоминается в этом же документе.

С учетом того, что я новичок в Objective-C, и я игнорирую ошибки, которые могут возникнуть при вызове attributesOfItemAtPath:error:, вы можете сделать следующее:

NSString *yourPath = @"Whatever.txt";
NSFileManager *man = [NSFileManager defaultManager];
NSDictionary *attrs = [man attributesOfItemAtPath: yourPath error: NULL];
UInt32 result = [attrs fileSize];
17 голосов
/ 28 февраля 2015

Если кому-то нужна версия Swift:

let attr: NSDictionary = try! NSFileManager.defaultManager().attributesOfItemAtPath(path)
print(attr.fileSize())
12 голосов
/ 27 июня 2012

ЦП поднимается с атрибутамиOfItemAtPath: ошибка:
Вы должны использовать stat .

#import <sys/stat.h>

struct stat stat1;
if( stat([inFilePath fileSystemRepresentation], &stat1) ) {
      // something is wrong
}
long long size = stat1.st_size;
printf("Size: %lld\n", stat1.st_size);
6 голосов
/ 28 сентября 2017

Если вы хотите использовать только размер файла с байтами,

unsigned long long fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:yourAssetPath error:nil] fileSize];

NSByteCountFormatter преобразование строки размера файла (из байтов) с точными КБ, МБ, ГБ ... Возвращает как 120 MB или 120 KB

NSError *error = nil;
NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:yourAssetPath error:&error];
if (attrs) {
    NSString *string = [NSByteCountFormatter stringFromByteCount:fileSize countStyle:NSByteCountFormatterCountStyleBinary];
    NSLog(@"%@", string);
}
6 голосов
/ 20 мая 2013

После ответа Одеда Бен Дова я бы предпочел использовать здесь объект:

NSNumber * mySize = [NSNumber numberWithUnsignedLongLong:[[[NSFileManager defaultManager] attributesOfItemAtPath:someFilePath error:nil] fileSize]];
2 голосов
/ 28 марта 2016

Swift 2.2:

do {
    let attr: NSDictionary = try NSFileManager.defaultManager().attributesOfItemAtPath(path)
    print(attr.fileSize())
} catch {
        print(error)
}
1 голос
/ 02 августа 2016

Это даст размер файла в байтах ...

uint64_t fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:_filePath error:nil] fileSize];
0 голосов
/ 03 марта 2018

Swift4:

        let attributes = try! FileManager.default.attributesOfItem(atPath: path)
        let fileSize = attributes[.size] as! NSNumber
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...