我尝试使用谷歌搜索,但人们似乎也遇到了同样的问题:我们无法获得所选文件的列表。

这是一段简单的工作代码,类似于我使用的代码:

OPENFILENAME ofn = { sizeof ofn };
wchar_t file[1024];
file[0] = '\0';
ofn.lpstrFile = file;
ofn.nMaxFile = 1024;
ofn.Flags = OFN_ALLOWMULTISELECT | OFN_EXPLORER;
GetOpenFileName(&ofn);

我实际上如何获得所选的文件名?目前,我只能在没有OFN_ALLOWMULTISELECT标志的情况下使用它,因此它将一个选定的文件名返回到ofn.lpstrFile中。我试图打印出该结构中的所有字符串变量,但未发现任何结果。它仅显示所选文件的主文件夹。

最佳答案

看来ofn.lpstrFile包含所有文件名,以NULL分隔并以另一个NULL结尾(有效地以空字符串结尾)。



MSDN

解析内容的可能实现是:

wchar_t* str = ofn.lpstrFile;
std::wstring directory = str;
str += ( directory.length() + 1 );
while ( *str ) {
  std::wstring filename = str;
  str += ( filename.length() + 1 );
  // use the filename, e.g. add it to a vector
}

08-25 08:24