如何将虚拟设备中的所有文件夹和文件名插入PC?
在C ++中;

我有问题,因为虚拟设备没有本地磁盘之类的字母;
路径像这样“计算机\ SUPRA_M727G \内部存储”开始

最佳答案

您必须使用Shell接口,即IShellFolderIEnumIDList

要获取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

09-26 05:59