2012-01-10 2 views
5

fileExistsAtPath возвращает NO для каталога, который существует. Если у меня есть следующий код:fileExistsAtPath возвращает NO для каталога, который существует

NSURL *newDirectoryPath = ... // path does not begin with a tilda 
           // and is created using URLByAppendingPathComponent:isDirectory: 

BOOL directoryExists = [self.fileManager fileExistsAtPath:[newDirectoryPath absoluteString]]; 
if (NO == directoryExists) 
{ 
    BOOL ret = [self.fileManager moveItemAtURL:self.currentPresentationDirectoryPath toURL:newDirectoryPath error: &err]; 
    // ret is YES, err is nil 

    directoryExists = [self.fileManager fileExistsAtPath:[newDirectoryPath absoluteString]]; 
} 

Даже если каталог только что был успешно создан с moveItemAtURL, fileExistsAtPath все еще возвращается NO.

Я знаю, что в документации говорится следующее:

Попытка предиката поведения в зависимости от текущего состояния файловой системы или конкретного файла в файловой системе не рекомендуется. Это может привести к нечетному поведению в случае состояния системы .

Но я хочу, чтобы понять, что вопрос здесь - если закрыть приложение и перезапустить его, то первая проверка fileExistsAtPath в приведенном выше коде все еще возвращаются НЕТ, даже если каталог был ранее успешно создан во время предыдущее выполнение кода, и я могу видеть каталог в Organizer, и я также могу успешно прочитать содержимое каталога и т. д.

PS есть нет fileExistsAtURL: способ?

+0

NSLog путь, который вы используете, и убедитесь, что это так, как вы думаете. –

+0

Не удается проверить на этой машине, но не предполагается, что это [newDirectoryPath путь] вместо [newDirectoryPath absoluteString]? –

+0

@ Джойхим Исакссон - это было -thanks – Gruntcakes

ответ

19

Если у вас есть NSURL, -absoluteURL не вернется к использованию в течение NSFileManager. Он вернет абсолютный URL-адрес с префиксом file://. Например: file:///path/to/file.

Вместо этого попробуйте использовать другой метод, например -path. Проверьте, работает ли это.

NSURL *myURL = /* some url */; 
NSString *myPath; 
BOOL exi; 

myPath = [myURL path]; 
exi = [[NSFileManager defaultManager] fileExistsAtPath:myPath]; 
if(!exi) { 
    NSLog(@"File does not exist"); 
} 
Смежные вопросы