在我的应用程序中,我有以caf和aac格式存储的音频文件。我需要从音频URL获取音频文件的大小(以KB为单位)。是否有实现这一要求的方法?
在我的应用程序中,我有以caf和aac格式存储的音频文件。我需要从音频URL获取音频文件的大小(以KB为单位)。是否有实现这一要求的方法?
NSFileManager
请求属性字典,然后从属性字典获取大小。NSFileManager * fileManager = [NSFileManager new];
NSError * error = 0;
NSDictionary * attr = [fileManager attributesOfItemAtPath:path error:&error];
// error checking
unsigned long long size = [attr fileSize];
[fileManager release];
这可在iOS 2和OSX.5上使用。
您可以使用CF/NSURL的属性访问器,这在iOS 5及以上版本和OSX.6及以上版本都可用:
id value = 0;
// Key for the file’s size in bytes, returned as an NSNumber object:
NSString * key = NSURLFileSizeKey;
NSError * error = 0;
BOOL result = [audioFileURL getResourceValue:&value forKey:key error:&error];
... error checking here ...
NSNumber * number = value;
有多个键可用于文件大小信息,另一个可能更适合您的需求。
您可以使用以下命令行:
$ curl --head $音频文件的URL | grep Content-Length | awk '{print ($2/1024);}'
[[ PDF示例 ]]
curl --head http://cran.r-project.org/doc/manuals/R-intro.pdf | grep Content-Length | awk '{print ($2/1024);}'
我通过将其转换为NSData并获取其长度属性来解决了这个问题。
NSError *err = nil;
NSData *audioData = [NSData dataWithContentsOfFile:file options:0 error:&err];
NSString *audioLength = [NSString stringWithFormat:@"%dkB",[audioData length]/1000];
NSLog(@"[audioData bytes]==%@",audioLength);
NSData
表示的情况。如果您需要NSData
表示,则您的方法很好。如果您不需要NSData
表示,则应该优先考虑我的方法,因为与从文件创建NSData
实例相比,它将节省大量CPU、磁盘活动和内存。 - justin