-1

私のメソッドは、私のプログラムが削除しなければならないファイルとディレクトリへのパスを表す文字列の配列を引数として取得します。foreach ループでは、文字列がファイルまたはディレクトリへのパスを表しているかどうかわからないため、File.Delete() または Directory.Delete のどちらの方法を使用すればよいかわかりません。

私はこのようなものを作成しますが、もっとうまくできると思います:)

foreach (string path in deleteItems)
        {
            try
            {
                Directory.Delete(path, true);
            }   
            catch (IOException)
            {
                try { File.Delete(path); }
                catch (IOException e) { Console.WriteLine(e); }
            }
        }

誰かがこのコードをより良くする方法を知っていますか?

編集:または私はそれがより良いと思います

            if(File.Exists(path))
            {
                File.Delete(path);
                continue;
            }
            if(Directory.Exists(path))
            {
                Directory.Delete(path);
                continue;
            }
4

3 に答える 3

1

文字列がファイルまたはディレクトリであるかどうかを確認したい場合は、次のいずれかを使用して簡単に確認してください。

foreach (string path in deleteItems)
{
  if(File.Exists(path)){
    File.Delete(path);
  }elseif(Directory.Exists(path)){
    Directory.Delete(path);
  }
}
于 2013-06-26T14:08:25.650 に答える
1

この回答で述べたように、次を確認する必要がありますFileAttributes

foreach (string path in deleteItems)
{
    FileAttributes attr = File.GetAttributes(@"c:\Temp");
    //detect whether its a directory or file
    if ((attr & FileAttributes.Directory) == FileAttributes.Directory)
        Directory.Delete(path, true);
    else
        File.Delete(path);
}

(読みやすくするために例外処理を省略)

于 2013-06-26T14:15:11.163 に答える
0

たとえば、Directory.Exists(path) を使用しない理由

if(Directory.Exists(path))

   Directory.Delete(path);

else

   File.Delete(path);
于 2013-06-26T14:16:20.693 に答える