3

いくつかの一時ファイルの内容を削除したいので、それらを削除する小さなプログラムに取り組んでいます。これら2つのコードサンプルがありますが、次の点で混乱しています:

  1. どのコード サンプルが優れていますか?
  2. 最初のサンプル code1 はファイル 1 と 2 を削除しますが、2 番目のサンプル code2 はフォルダー 1 と 2 の内容を削除しますか?

コード1

    public void DeleteContains(string Pathz)
    {
        List<DirectoryInfo> FolderToClear = new List<DirectoryInfo>();
        FolderToClear.Add(new DirectoryInfo(@"C:\Users\user\Desktop\1"));
        FolderToClear.Add(new DirectoryInfo(@"C:\Users\user\Desktop\2"));

        foreach (DirectoryInfo x in FolderToClear)
        {
            x.Delete(true);
        }
    }

コード 2

    private void DeleteContents(string Path)
    {
        string[] DirectoryList = Directory.GetDirectories(Path);
        string[] FileList = Directory.GetFiles(Path);

        foreach (string file in FileList)
        {
            File.Delete(file);
        }
        foreach ( string directoryin DirectoryList)
        {
            Directory.Delete(directory, true);
        }
    }
4

2 に答える 2

2

編集:OPはDirectoryInfo.DeleteとDirectory.Deleteの比較を望んでいると思います。

各メソッドの逆コンパイルされたソースを見ると(私はresharperを使用して表示しました)、DirectoryInfo.DeleteとDirectory.Deleteの両方が4つの引数を使用してDeleteメソッドを呼び出していることがわかります。IMHO、唯一の違いは、Directory.Deleteがフルパスを取得するためにPath.GetFullPathInternalを呼び出す必要があることです。Path.GetFullPathInternalは、実際には非常に長いメソッドであり、多くのチェックが行われます。パフォーマンスの一連のテストを実行しないと、どちらがどれだけ高速であるかを判断することはできません。

Directory.Delete

    [ResourceExposure(ResourceScope.Machine)]
    [ResourceConsumption(ResourceScope.Machine)]
    public static void Delete(String path, bool recursive)
    { 
        String fullPath = Path.GetFullPathInternal(path);
        Delete(fullPath, path, recursive, true); 
    } 

DirectoryInfo.Delete

    [ResourceExposure(ResourceScope.None)] 
    [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
    public void Delete(bool recursive) 
    {
        Directory.Delete(FullPath, OriginalPath, recursive, true);
    }
于 2012-12-14T19:24:12.210 に答える
0

最初のコード サンプルは、パラメーターで渡された内容に関係なく、"C:\Users\user\Desktop\1" および "C:\Users\user\Desktop\2" フォルダーのみを削除します。

2 番目のコード サンプルは、パラメーターで指定されたディレクトリ内にあるすべてのファイルとフォルダーを削除します。

于 2012-12-14T19:10:02.913 に答える