c# 如何在删除时跳过文件

问题描述 投票:0回答:1

我正在构建一个控制台应用程序来从

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

我不知道如何实现这一点。如果有人能帮助我解决这个问题,那将非常有帮助。预先感谢。

c# delete-file
1个回答
0
投票

这在 .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);
© www.soinside.com 2019 - 2024. All rights reserved.