Какао - NSFileManager removeItemAtPath не работает - PullRequest
3 голосов
/ 07 января 2011

Я пытаюсь удалить файл, но каким-то образом nsfilemanager не позволяет мне это сделать. Я использую файл в одной строке кода, но как только это действие будет выполнено, я хочу, чтобы файл был удален. Я зарегистрировал код ошибки и сообщение, и я получаю код ошибки: 4 и сообщение:

"text.txt" could not be removed

Есть ли способ исправить эту ошибку "чисто" (без всяких взломов), чтобы Apple приняла это приложение в свой Mac App Store?

РЕДАКТИРОВАТЬ:

Вот что я использую:

[[NSFileManager defaultManager] removeItemAtPath:filePath error:NULL];

Спасибо

* 1013 Кевин *

Ответы [ 6 ]

12 голосов
/ 07 января 2011

Код ошибки 4 выглядит как NSNoSuchFileError . Если файл, который вы хотите удалить, действительно существует, значит, вы неправильно указали путь. Вам нужно будет опубликовать некоторый код, если вы хотите, чтобы мы точно указали, как вы ошиблись в пути.

Если файл не существует, вы можете игнорировать ошибку.

3 голосов
/ 09 марта 2015

У меня была похожая проблема в swift. По какой-то причине fileManager.removeItemAtPath не работал, и я изменил fileManager.removeItemAtPath (filePath) на fileManager.removeItemAtURL (fileURL), и он отлично работает.

    let fileManager = NSFileManager()
    let documentsFolderUrl = fileManager.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false, error: nil)

    let soundURL = documentsFolderUrl!.URLByAppendingPathComponent(recording.path)
    let stringTrimmedFilePath = "trimmed_\(recording.path)"
    let trimmedSoundURL = documentsFolderUrl!.URLByAppendingPathComponent(stringTrimmedFilePath)
    var error: NSError?
    fileManager.removeItemAtURL(trimmedSoundURL, error: &error)
2 голосов
/ 05 ноября 2013

Ваш путь неверен

Используйте следующее

NSString *str = [outputFieldURL path];

вместо

NSString *str = [outputFieldURL absoluteString];

Методу "removeItemAtPath:" нужен локальный путь к файлу. Если вы хотите удалить с помощью URL, вы должны использовать -removeItemAtURL:

2 голосов
/ 07 января 2011

Сначала вам нужно выбрать путь к каталогу документов, затем вы можете удалить файл.Недостаточно только удалить оператор.

   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
        NSString *documentsDirectoryPath = [paths objectAtIndex:0];

    NSString *databaseFile = [documentsDirectoryPath stringByAppendingPathComponent:@"text.txt"];

    NSFileManager *fileManager = [NSFileManager defaultManager];
    [fileManager removeItemAtPath:databaseFile error:NULL];

используйте это для решения вашей проблемы.

0 голосов
/ 27 марта 2018

Метод по умолчанию AFNetworking 3.0 не обновляет загружаемые файлы.

Если вы хотите перезаписать этот файл в Objective-C + iOS9.0, вам нужно сделать следующее:

- (NSURLSessionDownloadTask *) downloadDocsFromUrl:(NSString *) url withSuccesBlock:(DocModelBlock) docModelBlock withErrorBlock:(ErrorBlock) errorBlock {

    NSURL *URL = [NSURL URLWithString:url];
    NSURLRequest *request = [NSURLRequest requestWithURL:URL];

    NSURLSessionDownloadTask *downloadTask = [self.sessionManager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {

        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSError *error;

        NSURL *documentsDirectoryURL = [fileManager URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:&error];

        if ([httpResponse statusCode] == 200) {
            NSURL *urlPath = [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];

            if ([fileManager fileExistsAtPath:urlPath.path]) {
                [fileManager removeItemAtPath:urlPath.path error:&error];
            }
        }

        return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
        if (error) {
            errorBlock(error);
        } else {
            docModelBlock(filePath);
        }
    }];
    [downloadTask resume];

    return downloadTask;
}
0 голосов
/ 02 сентября 2016

Я просто понял из чего-то очень важного, когда вы используете NSFileManager. Вы должны быть в курсе App Sandboxing.

let documentDirectory = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, .UserDomainMask, true)[0]

Эта строка возвращает каталог документа пути вашего приложения в изолированной программной среде. Когда вы создаете файл с FileManager в вашей директории документов (например, не сохраняйте полный путь к файлу, а только путь из текущей директории документа).

Вы сможете воссоздать полный путь к созданному вами файлу.

Надеюсь (через 5 лет) помочь разработчикам; -)

...