Проверка, существует ли файл, когда файл на внешнем устройстве

Файл списка воспроизведения.m3u содержит записи, доступные на внешнем устройстве (в данном случае на USB-диске), такие как:

/Volumes/KINGSTON/folder/mytitle.mp3

Я хотел бы проверить, существует ли файл:

NSURL *url = [NSURL URLWithString:@"/Volumes/KINGSTON/folder/mytitle.mp3"];
NSFileManager *manager = [NSFileManager defaultManager];
NSLog(@"%d",[manager fileExistsAtPath:[url absoluteString]]); //returns 0. I expect 1

Я также попробовал:

NSURL *u = [[NSURL alloc]initWithScheme:@"/Volumes" host:@"/KINGSTON" path:@"/folder/mytitle.mp3"];
NSLog(@"%d",[manager fileExistsAtPath:[u absoluteString]]); //0

Что я сделал не так?

Спасибо,

Roland

2 ответа

Решение
NSURL *url = [NSURL URLWithString:@"/Volumes/KINGSTON/folder/mytitle.mp3"];

Эта строка не описывает URL. Это путь. использование fileURLWithPath:,

NSLog(@"%d",[manager fileExistsAtPath:[url absoluteString]]);

absoluteString не возвращает путь; он возвращает строку, описывающую URL. использование path,

Или, еще лучше, используйтеcheckResourceIsReachableAndReturnError:,

Я также попробовал:

NSURL *u = [[NSURL alloc]initWithScheme:@"/Volumes" host:@"/KINGSTON" path:@"/folder/mytitle.mp3"];

/ Volumes не является схемой, /KINGSTON не является хостом, а /folder/mytitle.mp3 является путем, но не ссылается ни на что, что существует.

Схема для URL файла file:и хост, как правило, либо localhost, либо пустая строка. Путь к URL-адресу файла - это полный абсолютный путь к файлу.

В вашем первом примере вам нужно использовать +[NSURL fileURLWithPath:], Во втором примере я вижу, что вы пытаетесь сделать, но вы просто делаете это неправильно.

Я предполагаю, что есть причина, по которой вы беспокоитесь NSURL когда у вас есть путь, вы можете пройти прямо к -fileExistsAtPath:?

Другие вопросы по тегам