У меня есть путь к файлу, содержащемуся в NSString. Есть ли способ получить размер файла?
Как получить размер файла с учетом пути?
Ответ 1
Этот один вкладыш может помочь людям:
unsigned long long fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:someFilePath error:nil] fileSize];
Это возвращает размер файла в байтах.
Ответ 2
Имейте в виду, что 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];
Ответ 3
В случае, если кому-то нужна версия Swift:
let attr: NSDictionary = try! NSFileManager.defaultManager().attributesOfItemAtPath(path)
print(attr.fileSize())
Ответ 4
CPU поднимается с атрибутами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);
Ответ 5
Если вам нужен только размер файла с байтами, просто используйте,
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
Следуя ответу от Oded Ben Dov, я предпочел бы использовать здесь объект:
NSNumber * mySize = [NSNumber numberWithUnsignedLongLong:[[[NSFileManager defaultManager] attributesOfItemAtPath:someFilePath error:nil] fileSize]];
Ответ 7
Swift 2.2:
do {
let attr: NSDictionary = try NSFileManager.defaultManager().attributesOfItemAtPath(path)
print(attr.fileSize())
} catch {
print(error)
}
Ответ 8
Он предоставит размер файла в байте...
uint64_t fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:_filePath error:nil] fileSize];
Ответ 9
Swift4:
let attributes = try! FileManager.default.attributesOfItem(atPath: path)
let fileSize = attributes[.size] as! NSNumber
Ответ 10
В Swift 3.x и выше вы можете использовать:
do {
//return [FileAttributeKey : Any]
let attr = try FileManager.default.attributesOfItem(atPath: filePath)
fileSize = attr[FileAttributeKey.size] as! UInt64
//or you can convert to NSDictionary, then get file size old way as well.
let attrDict: NSDictionary = try FileManager.default.attributesOfItem(atPath: filePath) as NSDictionary
fileSize = dict.fileSize()
} catch {
print("Error: \(error)")
}