VB6にて、作成したEXEにテキストファイルをドラッグして
Open関数でファイルを開く事を考えています。
以下、プログラム冒頭なのですが
Private Sub Form_Load()
Dim intNo As Integer
intNo = FreeFile()
Open Command() For Input As #intNo
でOpenのところで「実行時エラー'52':ファイル名または番号が不正です」と出ます。
デバッグでコマンドライン引数を渡した場合は問題なく開けますが、
EXEから開こうとするとCommand()関数は正しく値を取得できているのですが
ファイルオープン時にエラーとなってしまいます。
解決策ございましたらご教授願います。
とりあえずCommand()が"実際に何を返すのか"を調べてみては?
たとえば以下のように
Dim intNo As Integer
Dim str As String
intNo = FreeFile()
str = Command()
MsgBox str
Open str For Input As #intNo
として、出来上がったEXEにCドライブ直下のtest.txtをドラッグして開くと、
"C:\test.txt"
がメッセージボックスでかえってきます。
なので、Command()自体は正しくドラッグしたファイルパスを
取得しているようです。
なのに、Open関数にそれを渡すとエラーになるのです・・・
もうお気づきかもしれませんが、
たとえば
Msgbox "C:\test.txt"
と
Msgbox """C:\text.txt"""
は別物です(今回は後者ですね)
/*
コマンドライン引数には、区切り文字である空白文字を入れるために、
"によるエスケープシーケンスができます。
例)
hoge.exe "abc def" ghi → hoge.exe に abc def と ghi を渡している
いつの世代のwindowsからかは分かりませんが、
アイコンにD&Dしたファイルのパス表記に
ダブルクオーテーション(")が付くようになりました
(確かWin95は短いパス名だった気がする…)
それに対する対応を書いていないのが、今回のバグですね
*/
確かにダブルクオーテーションに対する対応をしていませんでした・・・
単純なミスに気づかず困り果てていました。
ガッさんありがとうございました!
ツイート | ![]() |