it-swarm.com.ru

Как получить размер файла с указанием пути?

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

66
hekevintran

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

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

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

132
Oded Ben Dov

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

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

NSString *yourPath = @"Whatever.txt";
NSFileManager *man = [NSFileManager defaultManager];
NSDictionary *attrs = [man attributesOfItemAtPath: yourPath error: NULL];
UInt32 result = [attrs fileSize];
73
Frank Shearar

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

let attr: NSDictionary = try! NSFileManager.defaultManager().attributesOfItemAtPath(path)
print(attr.fileSize())
17
Tyler Long

ЦП поднимается с атрибутами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);
12
Parag Bafna

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

NSNumber * mySize = [NSNumber numberWithUnsignedLongLong:[[[NSFileManager defaultManager] attributesOfItemAtPath:someFilePath error:nil] fileSize]];
6
Apollo

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

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);
}
5
Sk Borhan Uddin

Swift 2.2:

do {
    let attr: NSDictionary = try NSFileManager.defaultManager().attributesOfItemAtPath(path)
    print(attr.fileSize())
} catch {
        print(error)
}
2
Bill Chan

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

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

Swift4:

        let attributes = try! FileManager.default.attributesOfItem(atPath: path)
        let fileSize = attributes[.size] as! NSNumber
0
Denis Kreshikhin