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
これでファイルを書こうとするのですが、なぜか
拡張子がない状態で保存されます。なぜでしょうか?
とりあえず文字列連結の前に、
戻り値の文字列の後ろにパディングされている
「Chr(0)」を削除してみては?
if not Right(SaveFileName,3)="txt" then
SaveFileName=SaveFileName + ".txt"
End If
ここを調べれば分かるんじゃないですか?
皆さん、ありがとうございます。
Forループを使って
SaveFileNameから一文字ずつとって、
別のString型の変数に格納。Null文字が出たときにExitFor
をかける方法を取りました。
特にプログラムしなくても
単に一度Text1.Textに代入してやる、
とかでもNullChar以降を排除してくれます。
SaveFileName=Left$(SaveFileName,Instr(1,SaveFileName,vbnullchar)-1)
でも、多分できます。