我正在构建一个控制台应用程序来从
appdata/local/temp
删除文件和文件夹。我在 SO 中引用了多个网站和页面。但遗憾的是没能得到太多。
到目前为止我所做的:
方法一:
Directory.Delete(folderPath, true);
方法二:递归删除
public static void RecursiveDelete(DirectoryInfo baseDir)
{
if (!baseDir.Exists)
return;
foreach (var dir in baseDir.EnumerateDirectories())
{
RecursiveDelete(dir);
}
baseDir.Delete(true);
}
方法三:try-catch
foreach (DirectoryInfo subDir in directoryInfo.GetDirectories())
{
try
{
subDir.Delete();
}
catch (Exception ex)
{
continue;
}
}
foreach (FileInfo file in directoryInfo.GetFiles())
{
try
{
file.Delete();
}
catch (Exception ex)
{
continue;
}
}
这些方法很好,但总是会弹出一个窗口,显示 -
Folder access denied
或 File in use
。
我想要什么?
我想单击显示 -
do this for all current items
的复选框,然后单击 skip
。
我不知道如何实现这一点。如果有人能帮助我解决这个问题,那将非常有帮助。预先感谢。
这在 .NET Core 中可以开箱即用,其中包括 .NET 5 及更高版本。
通过将
SearchOption.AllDirectories
参数传递给 EnumerateFile
: 始终可以进行递归搜索
var allFiles=baseDir("*",SearchOption.AllDirectories);
.NET Core 添加了一个重载,它接受 EnumerationOptions 对象,该对象允许忽略无法访问的文件夹和对象:
var options=new EnumerationOptions {
RecuresSubdirectories=true,
IgnoreInaccessible=true
};
var allFiles=baseDir("*",options);