0

可能重复:
寻找用于检测可移动驱动器(USB 闪存)的 C# 代码

我正在使用 C# 和 WPF。我的应用程序有一个自定义对话框,显示连接到计算机的所有驱动器,并允许用户导航到特定文件夹,其中文件将由手头的进程输出。我没有使用通用文件夹选择器对话框,因为我需要该通用对话框中不包含的功能,并且需要使对话框的外观与我的应用程序样式保持一致。

该功能的目的是允许用户将数据导出到拇指驱动器,因此我希望我的应用程序在新驱动器可用时接收通知。我在内部使用字符串“::{20D04FE0-3AEA-1069-A2D8-08002B30309D}”来表示 MyComputer 特殊文件夹。

我尝试将相同的字符串传递给FileSystemWatcher该类的实例,但这告诉我该字符串不是有效路径。所以看起来我无法以这种方式实现我想要的。

从操作系统接收新拇指驱动器已添加到计算机并将其添加到我的TreeView控件的通知的正确方法是什么?

4

1 回答 1

2

我在内部使用字符串“...”来表示 MyComputer 特殊文件夹

这行不通。它确实是一个特殊的文件夹,它实际上并不存在于文件系统中。这些是Windows 资源管理器中的虚拟文件夹,由 shell 命名空间扩展实现。演示很方便,它允许给出“事物存储在文件夹中”范式的一致视图。但是如果文件系统上没有真正的文件夹,FileSystemWatcher 就无法生成更改通知。

获取驱动器附件通知需要监听即插即用事件。通常以 WM_DEVICECHANGE 消息开头。您并不完全希望自己编写此代码,设置 api 非常坚韧,而且 pinvoke 也很困难。您也不必这样做,它之前已经被包装了很多次,以使其易于在 C# 程序中使用。按照对您的问题的评论中给出的链接进行操作。

于 2013-01-23T17:27:15.107 回答