NSFileManager不删除存在的文件

时间:2012-05-16 09:05:33

标签: iphone ios nsfilemanager

我在使用NSFileManager功能时遇到了一些问题。 这在Simulator和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);
    }
}

此输出是路径路径 .deleted中的文件。 我最终只是想使用 removeItemAtPath 删除该文件,但这不起作用。它会返回成功,但如果我在文件目录中看到它,我甚至可以在一小时后看到它。

4 个答案:

答案 0 :(得分:37)

如果您要删除文件,请使用{/ 1}}

removeItemAtPath:myPath error:NULL

答案 1 :(得分:1)

将此用于搜索路径并删除视频

(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) {
          NSLog@"file deleted ");
        }else
        {
        NSLog@"file not deleted ");
        }
    }   

答案 2 :(得分:1)

我遇到了同样的问题。我仍然感到困惑,为什么修复工作,但值得一提,以防其他人解释它。

我发现[[NSFileManager defaultManager] removeItemAtURL:url error:&error]会在第一次尝试时返回false,但是会出现nil错误。在第二次尝试时,它将返回true。

以下是我的代码:

// 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模拟器上运行。这闻起来像一个臭虫。我要提交雷达。

答案 3 :(得分:1)

当你使用NSFileManager时,我只是想出了一些非常重要的东西。您必须了解App Sandboxing。

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

此行返回应用程序沙箱的路径文档目录。在文档目录中使用FileManager创建文件时(例如),不要保存完整文件路径,只保存当前文档目录中的路径。

您将能够重新创建所创建文件的完整路径。

希望(5年后)帮助开发人员; - )