0

次の方法でフォルダの内容をすべて削除しました

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は削除されません。

どうすればこれを修正できますか、、 ??

ディレクトリを削除する方法はありますか?よろしくお願いします

4

1 に答える 1

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:です。

于 2012-06-01T05:48:11.293 に答える