dポイントプレゼントキャンペーン実施中!

Visual C++(Win32API)でアプリケーションを開発しているのですが,GetOpenFileNameで複数のファイル名を取得できるもののファイルごとの分割が出来ません。ちなみに,複数のファイルを選択できるようにはしてあります。また,環境の関係上文字列の型はLPTSTRを使わずLPWSTRを利用しています。環境は以下の通りです。

OS:Windows 7 SP1
Visual Studio:Visual Studio 2010 Professional

回答よろしくお願いします。

A 回答 (1件)

処理の仕方自体はWCHARでもcharでも変わらないと思いますけど……。



http://www.crimson-systems.com/tips/t020a.htm
とか。
charをWCHARへ、char *をWCHAR *への読み替えでOKなんじゃないですかね。

いまいちな例ですが……
 OPENFILENAME ofn;
 WCHAR fileName[MAX_PATH];

 fileName[0] = '\0';
 ZeroMemory(&ofn, sizeof(ofn));
 ofn.lStructSize = sizeof(ofn);
 ofn.Flags = OFN_ALLOWMULTISELECT | OFN_EXPLORER | OFN_HIDEREADONLY;
 ofn.lpstrFile = fileName;
 ofn.nMaxFile = sizeof(fileName);
 ofn.lpstrFilter = L"テキストファイル\0*.txt\0全てのファイル(*.*)\0*.*\0";
 ofn.lpstrDefExt = L"txt";
 ofn.nFilterIndex = 1;
 if(GetOpenFileName(&ofn)) {
  WCHAR TargetFile[3][MAX_PATH];
  WCHAR TargetPath[MAX_PATH];
  int iCnt = 0, nPos;

  ZeroMemory(TargetFile, sizeof(TargetFile));
  nPos = lstrlen(fileName) + 1;
  if(fileName[nPos]) {
   // 複数ファイルが選択された
   lstrcpy(TargetPath, fileName);
   if(fileName[lstrlen(fileName) - 1] != L'\\') lstrcat(TargetPath, L"\\");
   do {
    // パスをコピー
    lstrcpy(TargetFile[iCnt], TargetPath);
    lstrcat(TargetFile[iCnt], &fileName[nPos]);
    iCnt++;
    nPos += ( lstrlen(&fileName[nPos]) + 1);
   } while(fileName[nPos]);
  } else {
   // 1つだけ選択された
   lstrcpy(TargetFile[0], fileName);
   iCnt = 1;
  }
  for(;iCnt > 0;iCnt--) {
   MessageBox(hWnd, TargetFile[(iCnt - 1)], L"選択ファイル", MB_OK);
  }
 }
4ファイル以上選択すると吹っ飛ぶものになっていますが…まぁ、そこら辺はよろしく処理して下さい。
# あと…ローカル変数のサイズが……。
    • good
    • 0
この回答へのお礼

回答頂きまして有難うございました!!

回答通りにしてみると無事ちゃんとした動作をすることができました!!

お礼日時:2013/07/09 16:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!