我使用以下方法删除文件夹的所有内容
NSFileManager *fm = [NSFileManager defaultManager];
NSArray* arrFilePath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * strFilePath = [arrFilePath objectAtIndex:0];
NSString *directory = [strFilePath stringByAppendingPathComponent:@"Electronic_Instrumentation-Sapna_publications"];
NSError *error = nil;
for (NSString *file in [fm contentsOfDirectoryAtPath:directory error:&error])
{
directory = [directory stringByAppendingPathComponent:file];
BOOL success = [fm removeItemAtPath:directory error:&error];
file = nil;
if (!success || error)
{
NSLog(@"Failed to remove files");
}
}
但它只删除目录中的第一个文件
说我在dorectory file1.txt,file2.txt,file3.txt中有3个文件
当我调用这个方法时,它会删除file1.txt但不删除其他文件,如果我调用该方法,则删除file2.txt但不删除file3.txt
我该如何解决这个问题,??
有没有办法删除目录?提前谢谢
答案 0 :(得分:3)
问题是您第一次进行循环时正在更改directory
。此后,您使用的是无效路径。第一次循环,directory
有类似的东西:
/path/to/the/file1.txt
下一次循环,你追加下一个文件名,所以directory
变为:
/path/to/the/file1.txt/file2.txt
这显然不起作用。
找到这样的问题的最佳方法是逐步调试调试器中的代码,随时查看相关变量。
修复此问题的正确方法,即使您知道它是什么,也就是停止修改directory
。您可以使用临时变量,如下所示:
for (NSString *file in [fm contentsOfDirectoryAtPath:directory error:&error])
{
NSString *path = [directory stringByAppendingPathComponent:file];
BOOL success = [fm removeItemAtPath:path error:&error];
或者您可以使用-stringByAppendingPathComponent:
的结果作为-removeItemAtPath:error:
的参数,如下所示:
for (NSString *file in [fm contentsOfDirectoryAtPath:directory error:&error])
{
BOOL success = [fm removeItemAtPath:[directory stringByAppendingPathComponent:file]
error:&error];
有没有办法删除目录?
您可以查看-removeItemAtPath:error:
的文档。我会救你一次旅行:
指示要删除的文件或目录的路径字符串。如果路径 指定一个目录,该目录的内容是递归的 除去。
是的,有一种简单的方法可以删除目录。只需将path
参数中的目录指定为-removeItemAtPath:error:
。