Получение размера аудиофайла в килобайтах

В моем приложении у меня есть аудиофайлы, хранящиеся в формате caf и aac. Мне нужно получить размер аудиофайла в КБ по URL-адресу аудио. Есть ли способ выполнить это требование?


person Siddharth    schedule 03.11.2011    source источник


Ответы (4)


Вы можете использовать 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

person justin    schedule 05.11.2011
comment
Привет, все работает, спасибо. Но я уже сделал это другим способом, о котором я упомянул ниже. - person Siddharth; 06.11.2011
comment
@Siddharth Да, создание представления NSData и получение его длины также работает, но вы должны зарезервировать этот подход, когда вам нужно представление NSData. Если вам нужно представление NSData, ваш подход отлично работает. Если вам не нужно представление NSData, вам следует отдать предпочтение моему подходу, потому что он сэкономит много ресурсов ЦП, дисковой активности и памяти по сравнению с созданием экземпляра NSData из файла. - person justin; 06.11.2011
comment
Хорошо. Звучит здорово. Спасибо. - person Siddharth; 08.11.2011

вы можете использовать следующую командную строку

$ curl --head $URL_OF_AUDIO_FILE | длина содержимого grep | awk '{печать ($2/1024);}'

[[Пример для PDF]]

curl --head http://cran.r-project.org/doc/manuals/R-intro.pdf | длина содержимого grep | awk '{печать ($2/1024);}'

person AbhishekKr    schedule 03.11.2011

Вы можете использовать средства доступа к свойствам 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;

Существует несколько ключей для информации о размере файла, другой может лучше подходить для ваших нужд.

person justin    schedule 03.11.2011
comment
Я пробовал это, но я получаю число как нулевое. Я получил результат bool как ДА. Любая причина? Где я делаю неправильно? - person Siddharth; 05.11.2011
comment
файл читается? также в ios4 метод ничего не делает. - person justin; 05.11.2011
comment
хорошо - на iOS вы можете использовать этот метод на 5.0 и более поздних версиях. я обновил свой ответ с этой деталью. - person justin; 05.11.2011
comment
@Siddharth я предоставил новый ответ, который имеет лучшую обратную совместимость. - person justin; 05.11.2011

Я решил это, преобразовав его в 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);
person Siddharth    schedule 06.11.2011