1

重複の可能性:
DirectoryInfo.Delete と Directory.Delete

Windows の一時ファイルや MSN キャッシュ ファイルなど、定期的に削除するいくつかのファイルを空にするために、このコードを作成しました。

コード1

新しいパスを追加して、DeleteContains メソッドを簡単に適用できます。パスをリストに追加するだけです。

コード2

必要なだけパスを追加することはできず、パスごとに新しい文字列の配列と新しいループも作成する必要があります

とにかく、code1 を使用して、フォルダーとその内容ではなく、フォルダーの内容を削除しますか??

code1 の foreach で code2 として機能するように回避する方法はありますか??

一部のフォルダーは削除される可能性があるため、それらを削除すると一部のアプリで問題が発生し、アプリが再び機能しなくなります

"C:\Users\user\AppData\Local\Temp"

他のフォルダはMSNキャッシュのように問題なく削除できます

"C:\Users\user\AppData\Local\Microsoft\Windows Live\Contacts"

コード1

        private void Clear_Click(object sender, EventArgs e)
    {
        List<DirectoryInfo> FolderToClear = new List<DirectoryInfo>();

        // here is a list of files  I want to delete  

        FolderToClear.Add(new DirectoryInfo("path1"));
        FolderToClear.Add(new DirectoryInfo("path2"));
        FolderToClear.Add(new DirectoryInfo("path3"));
        FolderToClear.Add(new DirectoryInfo("path4"));

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

コード2

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

        foreach (string xin FileList)
        {
            File.Delete(x);
        }
        foreach ( string x in DirectoryList)
        {
            Directory.Delete(x, true);
        }
    }
4

1 に答える 1

4

試す:

DirectoryInfo directory = new DirectoryInfo("Path");
foreach (FileInfo fi in directory.GetFiles())
{
    fi.Delete();
}

さらに良いことに、指定した DirectoryInfo の下にあるすべてのファイルとサブディレクトリを削除する再帰関数を次に示します。

注:ここにはファイルロックを処理するものは何もないため、ファイルを開いていると爆撃します。これで始められるはずです。

    public void KeepTheseFolders(DirectoryInfo dirInfo)
    {
        DeleteFolder(new DirectoryInfo("Path1"), false);
        DeleteFolder(new DirectoryInfo("Path2"), false);
        DeleteFolder(new DirectoryInfo("Path3"), false);
        DeleteFolder(new DirectoryInfo("Path4"), false);
    }

    public void DeleteFolder(DirectoryInfo dirInfo, bool deleteDirectory)
    {
        //Check for sub Directories
        foreach (DirectoryInfo di in dirInfo.GetDirectories())
        {
            //Call itself to delete the sub directory
            DeleteFolder(di, true);
        }

        //Delete Files in Directory
        foreach (FileInfo fi in dirInfo.GetFiles())
        {
            fi.Delete();
        }

        //Finally Delete Empty Directory if optioned
        if (deleteDirectory)
        {
            dirInfo.Delete();
        }
    }

元のフォルダを保持できるように追加しました

于 2012-12-14T21:40:49.453 に答える