如何使用C#控制台应用程序获取回收站中文件列表

3
我正在完成一个作业,使用shell32.dll获取回收站中文件的数量。然而,我无法显示回收站中文件的列表,并且在尝试使用shell时一直收到“System.InvalidCastException”错误。
我在Stack Overflow上浏览了很多解决方案,大部分都使用shell32.dll来获取回收站中的文件列表。
我尝试的最新代码如下:
public static void Main(string[] args)
{
    Shell shell = new Shell();
    Folder folder = shell.NameSpace(0x000a);

    foreach (FolderItem2 item in folder.Items())
        Console.WriteLine("FileName:{0}", item.Name);

    Marshal.FinalReleaseComObject(shell);
    Console.ReadLine();
}

请告知我们具体的错误以及发生错误的代码行数。还请告知您正在测试的Windows版本和.NET Framework版本。这个答案至少在Windows 7上似乎是有效的,并且与您的解决方案略有不同。您是否也尝试过那个答案? - undefined
可能是使用Shell32获取文件扩展属性时出现异常的重复问题。 - undefined
1
Windows版本非常重要,你需要通过在Main()方法上添加[STAThread]属性来增加它在每个版本上的良好运行几率。 - undefined
1个回答

2

这个错误很可能是因为你的方法缺少STAThread。下面的示例是一个旧的测试,实际上它做的事情和你正在尝试做的一样。如果错误出现在获取实际名称方面,那么我注意到你的方法与我的不同。我正在请求文件夹提供关于其文件的具体细节。


using Shell32;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace ConsoleApplication1101
{
    class Program
    {
        [STAThread()]
        static void Main(string[] args)
        {
            // create shell
            var shell = new Shell();

            // get recycler folder
            var recyclerFolder = shell.NameSpace(10);

            // for each files
            for (int i = 0; i < recyclerFolder.Items().Count; i++)
            {
                // get the folder item
                var folderItems = recyclerFolder.Items().Item(i);

                // get file name
                var filename = recyclerFolder.GetDetailsOf(folderItems, 0);

                // write file path to console
                Console.WriteLine(filename);
            }
        }
    }
}

这里是帮助文档,如果您需要文件的其他信息,请查看GetDetailsOf

最初的回答。

太棒了!它正常运行了!感谢你的帮助!希望我能完成我的作业。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接