如何获取插入到pc的虚拟设备中的所有文件夹和文件名? 在 C++ 中;
我有问题,因为虚拟设备没有像本地磁盘那样的盘符; 路径是这样开始的“Computer\SUPRA_M727G\Internal storage”
最佳答案
您必须使用 Shell 接口(interface),即 IShellFolder
和 IEnumIDList
.
要获取 “内部存储”
文件夹的 IShellFolder
,您可以:
使用
SHGetDesktopFolder()
获取 Shell 命名空间根的IShellFolder
,然后将"Computer\SUPRA_M727G\Internal storage"
字符串传递给它的IShellFolder::ParseDisplayName()
获得绝对ITEMIDLIST
的方法你可以传递给它的IShellFolder::BindToObject()
方法。使用
SHParseDisplayName()
或ILCreateFromPath()
将"Computer\SUPRA_M727G\Internal storage"
字符串转换为绝对值ITEMIDLIST
你可以传递给SHBindToObject()
其psf
参数设置为NULL
。
无论哪种方式,一旦您拥有用于存储文件夹的 IShellFolder
,您就可以使用它的 IShellFolder::EnumObjects()
获取 IEnumIDList
以枚举其文件和子文件夹的方法。枚举将为您提供每个项目的相关 ITEMIDLIST
。要以字符串形式检索每个项目的名称,请将每个 ITEMIDLIST
传递给它的 IShellFolder::GetDisplayNameOf()
方法,然后传递返回的 STRRET
到 StrRetTo...()
函数之一( StrRetToBSTR()
、 StrRetToBuf()
或 StrRetToStr()
)。
有关详细信息,请参阅 MSDN:
关于C++ 如何从虚拟设备中获取文件夹和文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29198011/