C# 如何在不删除目录本身的情况下删除目录中的内容?这是我到目前为止试过的

C# 如何在不删除目录本身的情况下删除目录中的内容?这是我到目前为止试过的,c#,directory,C#,Directory,我正在制作一个按钮,读取文件路径,然后删除文件夹中的文件。它当前正在删除整个目录。这是我的密码: public void deleteFiles(string Server) { string output = "\\\\" + Server + "\\F\\Output"; string input = "\\\\" + Server + "\\F\\Input"; string exceptions = "\\\\" + Server + "\\F\\Exceptio

我正在制作一个按钮,读取文件路径,然后删除文件夹中的文件。它当前正在删除整个目录。这是我的密码:

public void deleteFiles(string Server)
{
    string output = "\\\\" + Server + "\\F\\Output";
    string input = "\\\\" + Server + "\\F\\Input";
    string exceptions = "\\\\" + Server + "\\F\\Exceptions";

    new System.IO.DirectoryInfo(input).Delete(true);
    new System.IO.DirectoryInfo(output).Delete(true);
    new System.IO.DirectoryInfo(exceptions).Delete(true);
}
您正在DirectoryInfo上调用Delete方法,应改为在FileInfo上调用该方法:

另一种方式:

var files =  Directory.GetFiles(input)
                .Concat(Directory.GetFiles(output))
                .Concat(Directory.GetFiles(exceptions));

foreach(var file in files)
     File.Delete(file);
DirectoryInfo.Delete和Directory.Delete删除空目录,如果要删除文件,可以尝试以下方法:

public void DeleteFiles(string path, bool recursive, string searchPattern = null)
{
    var entries = searchPattern == null ? Directory.EnumerateFileSystemEntries(path) : Directory.EnumerateFileSystemEntries(path, searchPattern);
    foreach(string entry in entries)
    {
        try
        {
            FileAttributes attr = File.GetAttributes(entry);
            //detect whether its a directory or file
            bool isDir = (attr & FileAttributes.Directory) == FileAttributes.Directory;
            if(!isDir)
                File.Delete(entry);
            else if(recursive)
                DeleteFiles(entry, true, searchPattern);
        }
        catch
        {
            //ignore
        }
    }
}

只需删除目录并重新创建它就行了吗?还是要保留权限?

-从路径中删除DirectoryInfo及其内容。这里有什么不清楚的地方?将有未知内容传递到列出的文件路径中。文件路径需要保持不变。如何在不删除路径的情况下删除内容?好的,我已经更正了标题。@SergeyBerezovskiy:但它仅以true作为参数删除内容,不带参数的重载不会删除内容,如果目录不为emptysame for recursive,它甚至会引发IOException。所以我假设OP只需要递归删除文件,这也会删除目录本身,这样就行了。由于权限不是问题,所以我最终以这种方式进行了设置。我希望有一个更干净的方法供将来参考。有时我确实需要保留权限。谢谢你的帮助Shark探员。
public void DeleteFiles(string path, bool recursive, string searchPattern = null)
{
    var entries = searchPattern == null ? Directory.EnumerateFileSystemEntries(path) : Directory.EnumerateFileSystemEntries(path, searchPattern);
    foreach(string entry in entries)
    {
        try
        {
            FileAttributes attr = File.GetAttributes(entry);
            //detect whether its a directory or file
            bool isDir = (attr & FileAttributes.Directory) == FileAttributes.Directory;
            if(!isDir)
                File.Delete(entry);
            else if(recursive)
                DeleteFiles(entry, true, searchPattern);
        }
        catch
        {
            //ignore
        }
    }
}