C# 如何在控制台应用程序中将文件移动到回收站?

C# 如何在控制台应用程序中将文件移动到回收站?,c#,C#,我已能够使用以下代码永久删除文件: var DeleteFromDir = new DirectoryInfo(sFromPath); var files = DeleteFromDir.GetFiles(".txt"); foreach(var file in files) { if(bDeletePermanently) file.Delete(); else ; //Move to recycle bin } 我尝试了以下方法: 添加对Mi

我已能够使用以下代码永久删除文件:

var DeleteFromDir = new DirectoryInfo(sFromPath);
var files = DeleteFromDir.GetFiles(".txt");
foreach(var file in files)
{
    if(bDeletePermanently)
        file.Delete();
    else
        ; //Move to recycle bin
}
我尝试了以下方法:

添加对Microsoft.VisualBasic程序集的引用。所需的类在此库中找到

  • 使用将此using语句添加到文件顶部 Microsoft.VisualBasic.FileIO

  • 使用FileSystem.DeleteFile删除文件,它可以选择 是否指定回收站


但这仅适用于UI上下文,并且我的应用程序基于控制台。

如果您有对Microsoft.VisualBasic程序集的引用(如果您愿意,也有一个NuGet包),那么您应该能够使用下面的代码

var DeleteFromDir = new DirectoryInfo(sFromPath);
var files = DeleteFromDir.GetFiles("*.txt");
foreach (var file in files)
{
    if (bDeletePermanently)
    {
        file.Delete();
    }
    else
    {
        FileSystem.DeleteFile(file.FullName, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin);
    }
}
为了回应您对UI上下文的关注,该函数将仅“显示错误对话框和隐藏进度对话框”。如果你想进一步阅读,我在上面找到了这个


您可以将[StatThread]属性放在Main()方法上。这是一个相当严重的违反公寓州的规则,但你会逃脱,很多VB.NET程序都会这样做。如果你的程序死锁了,那么你就没有死锁。@HansPassant,我还以为它是用于线程的。。不知道我们也可以用它来做控制台。。如果有助于解决我面临的问题,请编写示例代码好吗?这对线程来说当然很重要。如果您创建了任何一个,并且他们使用了一个单元线程COM服务器,那么您将遇到死锁。这种可能性很小。您依次使用的方法使用SHFileOperation()。要求STA的winapi函数,因为它可能显示用户界面。当你删除到回收站时,它不会被删除,所以没有什么好担心的。不知道如何将[StatThread]的9个字符转换为示例代码。就用它吧。