删除包含文件夹而不是文件夹It self?

时间:2012-12-14 21:26:18

标签: c# .net

  

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

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

CODE1

我可以添加新路径以简单方式应用DeleteContains方法我只需添加列表路径

码2

不允许我添加我想要的路径,我必须为每个路径和新循环创建新的字符串数组

无论如何使用code1删除包含文件夹而不是文件夹及其包含的内容??

在code1中的foreach中的任何工作都可以作为code2工作?

因为某些文件夹可能被删除或删除它们会导致某些应用程序出现问题而应用程序将无法再次使用

“C:\用户\用户\应用程序数据\本地的\ Temp”

虽然其他文件夹可以删除它,没有问题像MSN兑现

“C:\ Users \ user \ AppData \ Local \ Microsoft \ Windows Live \ Contacts”

CODE1

        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);
        }
    }

1 个答案:

答案 0 :(得分: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();
        }
    }

添加它以便您可以保留原始文件夹