Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 获取以kb为单位的音频文件大小_Iphone_Objective C_Audio_Avaudioplayer_Nsdata - Fatal编程技术网

Iphone 获取以kb为单位的音频文件大小

Iphone 获取以kb为单位的音频文件大小,iphone,objective-c,audio,avaudioplayer,nsdata,Iphone,Objective C,Audio,Avaudioplayer,Nsdata,在我的应用程序中,我有一个以caf和aac格式存储的音频文件。我需要从音频url获取音频文件的大小(kb)。有什么方法可以达到这个要求吗?您可以使用以下命令行 $curl--head$URL_OF_AUDIO_文件| grep Content Length | awk'{print($2/1024);}' [[PDF格式示例]] curl--head | grep Content Length | awk'{print($2/1024);}'您可以使用CF/NSURL的属性访问器,这些访问器在i

在我的应用程序中,我有一个以caf和aac格式存储的音频文件。我需要从音频url获取音频文件的大小(kb)。有什么方法可以达到这个要求吗?

您可以使用以下命令行

$curl--head$URL_OF_AUDIO_文件| grep Content Length | awk'{print($2/1024);}'

[[PDF格式示例]]


curl--head | grep Content Length | awk'{print($2/1024);}'

您可以使用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;

文件大小信息有多个键,另一个键可能更适合您的需要。

您可以使用
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上可用。我通过将其转换为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);

我试过了,但是我得到的数字是空的。我得到的结果是肯定的,有什么原因吗?我哪里做错了?文件可读吗?另外,在ios4中,该方法不执行任何操作。ok-在iOS上,您可以在5.0及更高版本上使用该方法。我已经用这个细节更新了我的答案。@Siddharth我提供了一个新的答案,它具有更好的向后兼容性。您好,它工作正常,谢谢。但我已经用下面提到的另一种方法做到了。@Siddharth是的,创建NSData表示并获取其长度也可以,但您应该保留这种方法,以备需要
NSData
表示时使用。如果您需要一个
NSData
表示,那么您的方法可以很好地工作。如果您不需要
NSData
表示,那么您应该支持我的方法,因为与从文件创建
NSData
实例相比,它将节省大量CPU、磁盘活动和内存。好的。听起来不错。谢谢。