NSFileManager не удаляет файл, который существует
У меня возникла проблема с использованием функций NSFileManager.
Это происходит как на симуляторе, так и на устройстве iPhone (iOS 5.1).
В принципе, у меня есть куча файлов, которые хранятся в документе, который я создал. Теперь я пытаюсь переместить файл (сохраненный по пути) в тот же каталог с другим именем, чтобы проверить, работает ли удаление.
if ([[NSFileManager defaultManager] isDeletableFileAtPath:path]) {
BOOL success = [[NSFileManager defaultManager] moveItemAtPath:path toPath:[path stringByAppendingString:@".deleted"] error:&error];
if (!success) {
NSLog(@"Error removing file at path: %@", error.localizedDescription);
}
}
Результатом этого является оба файла по пути и path.deleted.
В конечном итоге я просто хочу удалить файл с помощью removeItemAtPath, но это не работает. Он возвращает успех, но если я вижу его в каталоге файлов, я все еще вижу его там даже через час.
Ответы
Ответ 1
Если вы хотите удалить файл, вы должны использовать removeItemAtPath:myPath error:NULL
как
NSError *error;
if ([[NSFileManager defaultManager] isDeletableFileAtPath:path]) {
BOOL success = [[NSFileManager defaultManager] removeItemAtPath:path error:&error];
if (!success) {
NSLog(@"Error removing file at path: %@", error.localizedDescription);
}
}
Ответ 2
Используйте это для пути поиска и удалите видео
(NSString *)applicationDocumentsDirectory {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
return basePath;
}
NSString *dataFilePath = [[[self applicationDocumentsDirectory]
stringByAppendingPathComponent:@"Data.nosync"]
stringByAppendingPathComponent:[NSString stringWithFormat:@"%@-%@.mp4",[dicForDelete valueForKey:keyVideoId],[dicForDelete valueForKey:keyVideoName]]];
NSError *error;
if ([[NSFileManager defaultManager] isDeletableFileAtPath:dataFilePath]) {
BOOL success = [[NSFileManager defaultManager] removeItemAtPath:dataFilePath error:&error];
if (success) {
[email protected]"file deleted ");
}else
{
[email protected]"file not deleted ");
}
}
Ответ 3
Я столкнулся с той же проблемой. Я все еще не понимаю, почему исправление работает, но стоит упомянуть, если другие могут это объяснить.
Я обнаружил, что [[NSFileManager defaultManager] removeItemAtURL:url error:&error]
вернет false с первой попытки, но с ошибкой nil. Во второй попытке оно вернется.
Вот как выглядел мой код:
// success == NO error = nil
BOOL success = [[NSFileManager defaultManager] removeItemAtURL:storeUrl error:&error];
// success == YES error = nil
success = [[NSFileManager defaultManager] removeItemAtURL:storeUrl error:&error];
Я обнаружил, что если бы я создал свой собственный экземпляр NSFileManager, он работал бы с первой попытки.
NSFileManager *fm = [[NSFileManager alloc] init];
[fm removeItemAtURL:storeUrl error:&error];
Я работаю на симуляторе iOS9. Это пахнет ошибкой. Я собираюсь подать радар.
Ответ 4
Я просто понимаю, что это очень важно, когда вы используете NSFileManager. Вы должны знать о приложении Sandboxing.
let documentDirectory = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, .UserDomainMask, true)[0]
Эта строка возвращает каталог документа пути вашего изолированного программного обеспечения. Когда вы создаете файл с FileManager в каталоге документа (например,), не сохраняйте полный путь к файлу, а только путь из текущего каталога документа.
Вы сможете воссоздать полный путь к созданному файлу.
Надежда (через 5 лет) помогает разработчикам; -)