如何将虚拟设备中的所有文件夹和文件名插入PC?
在C ++中;
我有问题,因为虚拟设备没有本地磁盘之类的字母;
路径像这样“计算机\ SUPRA_M727G \内部存储”开始
最佳答案
您必须使用Shell接口,即IShellFolder
和IEnumIDList
。
要获取IShellFolder
文件夹的"Internal storage"
,您可以:
使用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:
Introduction to the Shell Namespace
Navigating the Shell Namespace