こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

前回、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になります。

投稿日時 - 2009-11-18 20:04:12

QNo.5458377

すぐに回答ほしいです

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

MessageBox( NULL, lpCmdLine, NULL, MB_OK );

としてみればわかると思いますが、半角スペースが入っている場合、" " で囲まれた文字列が渡されるんですね。
自力で " " を取り除いても良いと思いますが、PathUnquoteSpaces() という API を使用すれば簡単に " " を取り除くことができます。
( ただし、Windows 2000 以降、または NT 4.0、Windows 95、98 等は IE 4.0 以上がインストールされていなければならないらしいです。)

前回の質問にあった exe ファイルが置かれているパス名の取得方法ですが、GetCommandLine() で実行ファイルのパスからコマンドラインパラメータまで全部が入った文字列が取得できますので、何らかの方法で、そこからパス名を切り出せばよいかな、と思います。

投稿日時 - 2009-11-18 20:44:30

お礼

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

投稿日時 - 2009-11-19 14:06:32

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

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

投稿日時 - 2009-11-19 08:19:10

お礼

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

投稿日時 - 2009-11-19 14:08:48

ANo.3

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

投稿日時 - 2009-11-19 07:59:16

ANo.2

そのプログラム、そもそも半角スペースを%20などに置き換えて読んでないプログラムなんじゃない?

パス全体を"" で 囲んで 渡してみて、確認してみたら?

投稿日時 - 2009-11-18 20:47:35

あなたにオススメの質問