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