名前をつけて保存ダイアログAPIの戻り値に拡張子をつけるには?

解決


Kushi  2004-06-16 20:41:42  No: 84044  IP: [192.*.*.*]

APIのGetSaveFileNameですが、
戻り値に拡張子がつきません。後で拡張子をつけようとするのですが、
なぜか文字列の結合ができません。なぜでしょうか?プログラムを載せるのでよろしくお願いします。

'OPENFILENAME構造体の設定
 
         .flags = OFN_PATHMUSTEXIST Or _
                  OFN_FILEMUSTEXIST Or _
                    OFN_HIDEREADONLY
         .hInstance = App.hInstance
        .hwndOwner =フォームのハンドル
        .lpstrTitle = "ファイルを保存"
        .lpstrFilter = "TextFile" & chr(0) & "*.txt" & chr(0)
        .lStructSize = Len(OFN)
        .nMaxFile = 250
        .lpstrFileTitle = String(250, Chr(0))
        .nMaxFileTitle = 250
        .lpstrFile = String(250, Chr(0))
'戻り値がc:\windows\testの場合
'戻り値格納変数はSaveFileNameです。
'Dim SaveFileName As String
if not Right(SaveFileName,3)="txt" then
 SaveFileName=SaveFileName + ".txt"
End If
Open SaveFileName For OutPut As #1
Dim A As String
A="ABCDEFG"
 Print #1,A
Close #1

これでファイルを書こうとするのですが、なぜか
拡張子がない状態で保存されます。なぜでしょうか?

編集    削除
Say  2004-06-16 21:13:05  No: 84045  IP: [192.*.*.*]

とりあえず文字列連結の前に、
戻り値の文字列の後ろにパディングされている
「Chr(0)」を削除してみては?

編集    削除
MM  2004-06-16 21:13:28  No: 84046  IP: [192.*.*.*]

if not Right(SaveFileName,3)="txt" then
 SaveFileName=SaveFileName + ".txt"
End If

ここを調べれば分かるんじゃないですか?

編集    削除
Kushi  2004-06-17 04:19:57  No: 84047  IP: [192.*.*.*]

皆さん、ありがとうございます。

Forループを使って
SaveFileNameから一文字ずつとって、
別のString型の変数に格納。Null文字が出たときにExitFor
をかける方法を取りました。

編集    削除
Say  2004-06-17 05:56:47  No: 84048  IP: [192.*.*.*]

特にプログラムしなくても
単に一度Text1.Textに代入してやる、
とかでもNullChar以降を排除してくれます。

編集    削除
いちゆ  2004-06-17 07:19:45  No: 84049  IP: [192.*.*.*]

SaveFileName=Left$(SaveFileName,Instr(1,SaveFileName,vbnullchar)-1)
でも、多分できます。

編集    削除