13

我在使用 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);
    }
}

其输出是pathpath .deleted 处的文件。我最终只想使用removeItemAtPath删除文件,但这不起作用。它返回成功,但如果我在文件目录中看到它,即使一个小时后我仍然可以在那里看到它。

4

4 回答 4

39

如果你想删除一个文件,你应该使用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);
    }
}
于 2012-05-16T11:50:02.460 回答
3

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

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

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

You'll be able to recreate the full path of your created file.

Hope (after 5 years) help over developers ;-)

于 2016-09-02T15:12:14.073 回答
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 ");
        }
    }   
于 2013-11-27T06:24:33.950 回答
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 模拟器上运行。这闻起来像个虫子。我要归档雷达。

于 2016-05-05T16:39:53.690 回答