получить атрибуты файла с помощью nsfilesustem в какао, такого файла не существует

Я ищу около 3 часов, как получить дату создания файла, я получаю URL-адрес с перечислителем, после этого я передаю его пути, исправляя проценты, и, наконец, я пытаюсь получить атрибуты файла... поэтому я никоим образом не изменяю путь, но всегда получаю ту же ошибку «Операция не может быть завершена. Нет такого файла или каталога» и путь «file:///Users/raul/Desktop/DSC_0386. JPG".

Пример кода:

NSError* error = nil;
//NSDictionary* fileAttribs = [[NSFileManager defaultManager] attributesOfItemAtPath:[[url absoluteString] stringByRemovingPercentEncoding] error:&error];
NSDictionary* fileAttribs = [[NSFileManager defaultManager] attributesOfItemAtPath:@"file://Users/raul/Desktop/DSC_0386.JPG" error:&error];
NSLog(@"%@",error);
NSDate *fecha = [fileAttribs objectForKey:NSFileCreationDate];

Я прокомментировал первый NSDictionary, чтобы попробовать второй оператор напрямую с nsstring.

Я проверил, что мой файл уже существует.

Пожалуйста, любая помощь?? Я что-то упускаю?


person raululm    schedule 21.09.2014    source источник


Ответы (1)


Несколько вопросов:

1) В большинстве случаев вам не нужно преобразовывать NSURL в строку пути для работы с файлом. В частности, вы можете использовать API «значение ресурса» NSURL, чтобы напрямую получить время создания:

NSDate* creationDate;
NSError* error;
if ([url getResourceValue:&creationDate forKey:NSURLCreationDateKey error:&error])
    /* use creationDate */;
else
    /* handle error */;

2) Если вам нужно получить строку пути из NSURL, не используйте -absoluteString. Это все равно будет строка URL-адреса с такими элементами, как «file://» и т. д. Строка URL-адреса не является допустимой строкой пути. Сообщение об ошибке, которое вы указали в своем вопросе, уже говорило вам об этом. Он показал вам «путь» к файлу «file:///Users/raul/Desktop/DSC_0386.JPG», но это совсем не путь.

Вы должны просто использовать метод -path. Вам не нужно ничего делать с процентным кодированием, когда вы получаете -path.

3) Вы должны игнорировать любой выходной параметр ошибки, пока не проверите, был ли вызванный вами метод успешным или неудачным, обычно путем проверки его возвращаемого значения. То есть код, который вы разместили, должен быть реорганизован следующим образом:

NSError* error = nil;
NSDictionary* fileAttribs = [[NSFileManager defaultManager] attributesOfItemAtPath:@"file://Users/raul/Desktop/DSC_0386.JPG" error:&error];
if (fileAttribs)
{
    NSDate *fecha = [fileAttribs objectForKey:NSFileCreationDate];
    // ... use fecha ...
}
else
    NSLog(@"%@",error);
person Ken Thomases    schedule 21.09.2014
comment
Спасибо, несколько минут назад я нашел тот же второй ответ. Я собираюсь попробовать 1-й. В 3-й части журнал ошибок просто был там, чтобы узнать, какая ошибка возникла у меня во время разработки. Большое Вам спасибо - person raululm; 22.09.2014