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

时间:2015-03-22 18:12:34

标签: c++ file winapi explorer readdir

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

我有问题,因为虚拟设备没有像本地光盘这样的字母; 路径开始像这样的“电脑\ SUPRA_M727G \内部存储” enter image description here

1 个答案:

答案 0 :(得分:3)

您必须使用Shell接口,即IShellFolderIEnumIDList

要获取IShellFolder文件夹的"Internal storage",您可以:

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

  2. 使用IShellFolder::BindToObject()SHParseDisplayName()"Computer\SUPRA_M727G\Internal storage"字符串转换为绝对ILCreateFromPath(),您可以将其传递给ITEMIDLIST psf参数设置为NULL

  3. 无论哪种方式,一旦您拥有IShellFolder存储文件夹,就可以使用其SHBindToObject()方法获取IEnumIDList来枚举其文件和子文件夹。枚举将为每个项目提供一个相对ITEMIDLIST。要将每个项目的名称检索为字符串,请将每个ITEMIDLIST传递给其IShellFolder::EnumObjects()方法,然后将返回的IShellFolder::GetDisplayNameOf()传递给其中一个StrRetTo...()函数({{3} },STRRETStrRetToBSTR())。

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

    StrRetToBuf()

    StrRetToStr()