VB6でEXEにドラッグしたテキストファイルをOpenしたい

解決


KOO  2006-06-25 10:35:08  No: 132027

VB6にて、作成したEXEにテキストファイルをドラッグして
Open関数でファイルを開く事を考えています。

以下、プログラム冒頭なのですが

Private Sub Form_Load()
    
    Dim intNo As Integer
    
    intNo = FreeFile()
    Open Command() For Input As #intNo 

でOpenのところで「実行時エラー'52':ファイル名または番号が不正です」と出ます。

デバッグでコマンドライン引数を渡した場合は問題なく開けますが、
EXEから開こうとするとCommand()関数は正しく値を取得できているのですが
ファイルオープン時にエラーとなってしまいます。

解決策ございましたらご教授願います。


ガッ  2006-06-25 18:32:43  No: 132028

とりあえずCommand()が"実際に何を返すのか"を調べてみては?


KOO  2006-06-25 22:51:04  No: 132029

たとえば以下のように

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関数にそれを渡すとエラーになるのです・・・


ガッ  2006-06-26 01:08:39  No: 132030

もうお気づきかもしれませんが、
たとえば
 Msgbox "C:\test.txt"

 Msgbox """C:\text.txt"""
は別物です(今回は後者ですね)

/*
コマンドライン引数には、区切り文字である空白文字を入れるために、
"によるエスケープシーケンスができます。
例)
 hoge.exe "abc def" ghi  →  hoge.exe に abc def と ghi を渡している

いつの世代のwindowsからかは分かりませんが、
アイコンにD&Dしたファイルのパス表記に
ダブルクオーテーション(")が付くようになりました
(確かWin95は短いパス名だった気がする…)
それに対する対応を書いていないのが、今回のバグですね
*/


KOO  2006-06-26 02:21:34  No: 132031

確かにダブルクオーテーションに対する対応をしていませんでした・・・

単純なミスに気づかず困り果てていました。

ガッさんありがとうございました!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加