C++ 如何从虚拟设备中获取文件夹和文件名?

标签 c++ file winapi explorer readdir

如何获取插入到pc的虚拟设备中的所有文件夹和文件名? 在 C++ 中;

我有问题,因为虚拟设备没有像本地磁盘那样的盘符; 路径是这样开始的“Computer\SUPRA_M727G\Internal storage” enter image description here

最佳答案

您必须使用 Shell 接口(interface),即 IShellFolderIEnumIDList .

要获取 “内部存储” 文件夹的 IShellFolder,您可以:

  1. 使用 SHGetDesktopFolder()获取 Shell 命名空间根的 IShellFolder,然后将 "Computer\SUPRA_M727G\Internal storage" 字符串传递给它的 IShellFolder::ParseDisplayName()获得绝对ITEMIDLIST的方法你可以传递给它的 IShellFolder::BindToObject()方法。

  2. 使用 SHParseDisplayName()ILCreateFromPath()"Computer\SUPRA_M727G\Internal storage" 字符串转换为绝对值 ITEMIDLIST你可以传递给SHBindToObject()psf 参数设置为 NULL

无论哪种方式,一旦您拥有用于存储文件夹的 IShellFolder,您就可以使用它的 IShellFolder::EnumObjects()获取 IEnumIDList 以枚举其文件和子文件夹的方法。枚举将为您提供每个项目的相关 ITEMIDLIST。要以字符串形式检索每个项目的名称,请将每个 ITEMIDLIST 传递给它的 IShellFolder::GetDisplayNameOf()方法,然后传递返回的 STRRETStrRetTo...() 函数之一( StrRetToBSTR()StrRetToBuf()StrRetToStr() )。

有关详细信息,请参阅 MSDN:

Introduction to the Shell Namespace

Navigating the Shell Namespace

关于C++ 如何从虚拟设备中获取文件夹和文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29198011/

相关文章:

c++ - 在 C++ 中使用未声明的列表作为参数

c++ - 根据 C 标准,fprintf、fputs...在 Windows 上的功能是否合法?

c++ - 如何从整个代码的函数中打开文件?

python - 如何在 Flask 中将数据写入文本文件?

C++:通过进程ID、进程句柄和标题名称从进程中获取唯一窗口的窗口句柄的最佳方法

c++ - 试图访问对象成员的段错误

c++ - 如何将变量从main传递给类下的函数?

php - 在 PHP 中查找多个 TXT 文件中的特定文本

C++——OpenProcess 返回错误代码 87

c++ - cpp如何关闭特定的监视器?