ページ 1 / 1
INIファイルのことなんですが・・・
Posted: 2006年1月01日(日) 15:39
by 麒麟
WritePrivateProfileString("TEST", "key1", TESTTEXT, "./test.ini")
(TESTTEXTは文字列です。)
INIファイル名を"./test.ini"というように指定しているのですが、
(これがよくないのだと思います。)
ファイルを開くなどで、カレントディレクトリ(?)が変わると
想定外のところに保存されます。
改善策を教えてください。
一応、実行ファイルのあるディレクトリを調べて、それに"./test.ini"を
加える方法を思いついたのですが、やり方がわかりませんでした。
Posted: 2006年1月01日(日) 17:49
by Toshi
WritePrivateProfileString は、絶対パスを渡さないと
Windows のフォルダにファイルを作成するので、
実行ファイルのあるフォルダの絶対パスを取得することになります。
コード: 全て選択
Dim INI[MAX_PATH] As Byte
GetModuleFileName(GetModuleHandle(NULL),INI,MAX_PATH)
lstrcpy(INI+lstrlen(INI)-3,"ini")
こうすると INI には実行ファイルの名前の拡張子を "ini" にしたものが入ります。
Posted: 2006年1月01日(日) 19:07
by ゲスト
> WritePrivateProfileString は、絶対パスを渡さないと
> Windows のフォルダにファイルを作成するので、
> 実行ファイルのあるフォルダの絶対パスを取得することになります。
>
>
コード: 全て選択
> Dim INI[MAX_PATH] As Byte
> GetModuleFileName(GetModuleHandle(NULL),INI,MAX_PATH)
> lstrcpy(INI+lstrlen(INI)-3,"ini")
>
>
>
> こうすると INI には実行ファイルの名前の拡張子を "ini" にしたものが入ります。
なるほど。こういうやり方がありましたか・・・
でも、この方法だと、実行ファイルと同じ名前の INI しか扱えませんよね?
出来れば、実行ファイルと違う名前のものも扱えるようなやり方がよいのですが・・・
Posted: 2006年1月01日(日) 19:09
by 麒麟
すいません、名前書き忘れてました。↑は私です。
Posted: 2006年1月01日(日) 22:46
by イグトランス
PathRemoveFileSpecというパスから末尾のファイル名部分を取り除く関数がありますのでこれを使えばできます。
コード: 全て選択
Declare Function PathRemoveFileSpec Lib "shlwapi.dll" _
Alias "PathRemoveFileSpecA" (pszPath As *Char) As Long
コード: 全て選択
Dim ModulePath[MAX_PATH] As Char
If GetModuleFileName(0, ModulePath, MAX_PATH) = 0 Then
' エラー
End If
If PathRemoveFileSpec(ModulePath) = FALSE Then
' エラー
End If
EXEのパスが"C:\Foo\Bar.exe"ならばこのコードを実行すると
ModulePathには"C:\Foo"が格納されています。
ここにhoge.iniを保存したければ,MakeStr(ModulePath) & "\hoge.ini"とすれば"C:\Foo\hoge.ini"となります。
ModulePathを使いまわす気がなければ,
変数ModulePathをIniファイルへのパスだということを示す適切な変数名にした上で,
直接lstrcpyで書き込んでしまっても良いでしょう。
Posted: 2006年1月01日(日) 22:47
by Toshi
でしたら
コード: 全て選択
Dim INI[MAX_PATH] As Byte
Dim Drive[2] As Byte
Dim Path[MAX_PATH] As Byte
GetModuleFileName(GetModuleHandle(NULL),INI,MAX_PATH)
_splitpath(INI,Drive,Path,NULL,NULL)
lstrcpy(INI,Drive)
lstrcat(INI,Path)
これで INI に実行ファイルのあるフォルダの絶対パスが入ると思います。
書き込んだ瞬間に先を越されました。。。
Posted: 2006年1月02日(月) 00:16
by 麒麟
>イグトランス 様
>Toshi 様
ありがとうございます。
おかげ様で、問題は解決できました。