我有一个包含在NSString中的文件的路径。有没有一种获取文件大小的方法?
我有一个包含在NSString中的文件的路径。有没有一种获取文件大小的方法?
Answers:
这一衬板可以帮助人们:
unsigned long long fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:someFilePath error:nil] fileSize];
这将返回文件大小(以字节为单位)。
INT_MAX
字节大小会怎样?您可能希望将结果强制转换为size_t
或unsigned long long int
,从而可以准确报告大型文件的大小(> 2 GB)。
unsigned long long
,因此int
不适合在这里使用。
请记住,从Mac OS X v10.5开始不赞成使用fileAttributesAtPath:traverseLink:。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];
CPU使用attributeOfItemAtPath:error引发:
应使用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);
stat
快速使用该结构吗?
如果您只想使用字节大小的文件,
unsigned long long fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:yourAssetPath error:nil] fileSize];
NSByteCountFormatter使用精确的KB,MB,GB转换文件大小(从字节)的字符串(从字节)...其返回值类似于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);
}
它将以字节为单位给出文件大小...
uint64_t fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:_filePath error:nil] fileSize];
Swift4:
let attributes = try! FileManager.default.attributesOfItem(atPath: path)
let fileSize = attributes[.size] as! NSNumber
在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)")
}