2012-06-01 2 views
0

я использовал следующий метод, чтобы удалить все содержимое папкикак удалить содержимое папки в OBJ с

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"); 
     } 
    } 

но его удаляемый только первый файл в каталоге

говорят, у меня есть 3 файла в файле dorectory file1.txt, file2.txt, file3.txt

, когда я вызываю этот метод, он удаляет только файл1.txt, но не другие файлы, опять же, если я вызываю этот метод, он удаляет файл file2.txt, но не file3.txt

как я могу исправить это, ??

есть ли способ удалить каталог? thanx заблаговременно

+0

Добавить эти файлы u хочу удалить в nsarray и добавить цикл один за другим весь объект, указанный в массиве, будет удален –

ответ

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:.

+0

thanx для ответа ур. ,,, ya это сработало – Ravi

Смежные вопросы