• ベストアンサー

ファイル名の半角スペースについて

前回、exeファイルにドラッグすることで動作するプログラム再質問 をした者です。本当に何度もすみません。 前回から調べた結果「ファイル名に日本語を指定したとき」ではなく、「ファイル名に半角スペースを指定したとき」上手くいかないということが解りました。  DOSでは半角スペースが区切り記号になってしまうことが影響しているのでしょうか?  一般的にデスクトップにデータファイルを作成すると「Documents and Settings」の下部におかれます。この場合、どうしても半角スペースを含んでしまいます。しかし、MicroSoftWordでは、デスクトップにおかれた名前に半角スペースを含むdocファイルをWORD.exeのアイコン上にドラッグすることでファイルを開くことができます。と言うことは何か解決策があるはずなのですが・・・・・・  お手数をお掛けして申し訳ございませんが、何卒宜しくお願い申し上げます。参考のためにソースプログラムを載せておきます。 #include <windows.h> #include <tchar.h> int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){ HANDLE hfile; hfile = CreateFile(lpCmdLine,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_READONLY,NULL); if(hfile == INVALID_HANDLE_VALUE){ MessageBox(NULL,_T("error"),NULL,MB_OK); return false; } //ここで処理をします(今回は省略させていただきました) return 0; } 開発環境はVisualC++2008ExpressEditionです。 このプログラムをビルド後、exeファイル上に 「a a」のように半角スペースを含むファイルをドラッグするとerrorになります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

MessageBox( NULL, lpCmdLine, NULL, MB_OK ); としてみればわかると思いますが、半角スペースが入っている場合、" " で囲まれた文字列が渡されるんですね。 自力で " " を取り除いても良いと思いますが、PathUnquoteSpaces() という API を使用すれば簡単に " " を取り除くことができます。 ( ただし、Windows 2000 以降、または NT 4.0、Windows 95、98 等は IE 4.0 以上がインストールされていなければならないらしいです。) 前回の質問にあった exe ファイルが置かれているパス名の取得方法ですが、GetCommandLine() で実行ファイルのパスからコマンドラインパラメータまで全部が入った文字列が取得できますので、何らかの方法で、そこからパス名を切り出せばよいかな、と思います。

cyacya2000
質問者

お礼

早速のご回答ありがとうございます。たしかに””で囲まれていました。プログラムを修正し、動きました。exeファイルの場所に関しても問題なくできました。本当にありがとうございました。

その他の回答 (3)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.4

間違えました __argv ではなくて __targv です 訂正します

cyacya2000
質問者

お礼

早速のご回答ありがとうございます。__targvを使ったら簡単にできました。 __targvは初めて知りました。ありがとうございました。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

_tWinMainなら __argv[1] で受け取れば " "なしの文字列が受け取れます exeのパスは __argv[0] です

回答No.2

そのプログラム、そもそも半角スペースを%20などに置き換えて読んでないプログラムなんじゃない? パス全体を"" で 囲んで 渡してみて、確認してみたら?

関連するQ&A