1

可能重复:
DirectoryInfo.Delete vs Directory.Delete

我编写此代码以清空一些我经常删除的文件,例如 Windows 中的 temp 和 MSN cahes 文件。

代码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 回答