如何得到通过GetOpenFileName选择的多个文件的文件名

#include <windows.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
 
  OPENFILENAME ofn;
  
  char szFile[MAX_PATH];
  
  ZeroMemory(&ofn,sizeof(ofn));
  
  ofn.lStructSize = sizeof(ofn);
  
  ofn.lpstrFile = szFile;
 
  
  ofn.lpstrFile[0] = TEXT('\0');
  
  ofn.nMaxFile = sizeof(szFile);
  
  ofn.lpstrFilter = TEXT("所有文件(*.*)\0*.*\0文本文件(*.txt)\0*.TXT\0");
  
  ofn.nFilterIndex = 1;
  
  ofn.lpstrFileTitle = NULL;
  
  ofn.nMaxFileTitle = 0;
  
  ofn.lpstrInitialDir = NULL;
  
  
  
  ofn.Flags = OFN_EXPLORER|OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT;
  
  if (GetOpenFileName(&ofn))
  {
  
  MessageBox(NULL,szFile,"你选择文件的路径",MB_OK);
 
  }

 return 0;
}
增加了一个OFN_ALLOWMULTISELECT选项,选择多个文件的路径则是目录的路径
经过调试发现 目录的路径然后加上各个文件名,中间用 “\0” 分割。
 
最后,上百度搜了下
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
 OPENFILENAME ofn;
 TCHAR szOpenFileNames[80*MAX_PATH];
 TCHAR szPath[MAX_PATH];
 TCHAR szFileName[80*MAX_PATH];
 TCHAR* p;
 int nLen = 0;
 ZeroMemory( &ofn, sizeof(ofn) );
 ofn.Flags = OFN_EXPLORER | OFN_ALLOWMULTISELECT;
 ofn.lStructSize = sizeof(ofn);
 ofn.lpstrFile = szOpenFileNames;
 ofn.nMaxFile = sizeof(szOpenFileNames);
 ofn.lpstrFile[0] = '\0';
 ofn.lpstrFilter = TEXT("All Files(*.*)\0*.*\0");
 if( GetOpenFileName( &ofn ) )
 {  
  //把第一个文件名前的复制到szPath,即:
  //如果只选了一个文件,就复制到最后一个'\'
  //如果选了多个文件,就复制到第一个NULL字符
  lstrcpyn(szPath, szOpenFileNames, ofn.nFileOffset );
  //当只选了一个文件时,下面这个NULL字符是必需的.
  //这里不区别对待选了一个和多个文件的情况
  szPath[ ofn.nFileOffset ] = '\0';
  nLen = lstrlen(szPath);
  
  if( szPath[nLen-1] != '\\' )   //如果选了多个文件,则必须加上'\\'
  {
   lstrcat(szPath, TEXT("\\"));
  }
  
  p = szOpenFileNames + ofn.nFileOffset; //把指针移到第一个文件
  
  ZeroMemory(szFileName, sizeof(szFileName));
  while( *p )
  {   
   lstrcat(szFileName, szPath);  //给文件名加上路径  
   lstrcat(szFileName, p);    //加上文件名  
   lstrcat(szFileName, TEXT("\n")); //换行   
   p += lstrlen(p) +1;     //移至下一个文件
  }
  MessageBox(NULL, szFileName, TEXT("MultiSelect"), MB_OK);
 }
这个程序可以选择多个文件

你可能感兴趣的:(职场,休闲,getOpenFileName)