[リストへもどる]
一括表示

投稿時間:2002/11/25(Mon) 18:14
投稿者名:Yuuko
Eメール:
URL :
タイトル:
GetPrivateProfileString関数で iniファイルが読込めない

ある自作プログラムのiniファイルを読み取る為に 
APIの WritePrivateProfileString 、GetPrivateProfileString関数を使用していますが
以下のような症状が出るのですが どなたかご存知無いでしょうか?

あるiniファイルに値が"B"と入っているとして 
これを10秒間隔でGetPrivateProfileString関数にて読込んで監視させています。

メモ帳にてiniファイルの値を "A" に書き変えましたが 値は"B"を取得してきます。
メモ帳を閉じても値は"B"を取得してきます。
もう一度 メモ帳にて iniファイルを開いた直後 "A"を取得してきました。
また 10秒以内にメモ帳を開いて修正して保存、終了してしまえばOKでした。

これはメモ帳ではない 他のテキスト修正用のアプリケーションでも同じでした。

メモ帳等による修正はダメなのでしょうか?。
可能にする方法は無いモノでしょうか?

投稿時間:2002/11/25(Mon) 19:04
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: GetPrivateProfileString関数で iniファイルが読込めない
> APIの WritePrivateProfileString 、GetPrivateProfileString関数を使用していますが
> 以下のような症状が出るのですが どなたかご存知無いでしょうか?

OSのライトキャッシュの問題ではないでしょうか。

解決するかどうかはわかりませんが、GetPrivateProfileStringを実行する前に、
WritePrivateProfileString の各パラメータに vbNullStringを指定して、キャッシュを
フラッシュ(キャッシュ上からディスク上への書き込み)させてみては如何でしょうか。


-- 以下、Platform SDK より引用 --

[WritePrivateProfileString]
》 Windows 2000/XP:
》 The system keeps a cached version of the most recent registry file mapping
》 to improve performance. If all the value of all of the parameters are NULL,
》 the function flushes the cache. If all the value of all of the parameters
》 are NULL, the function flushes the cache.

投稿時間:2002/11/26(Tue) 08:45
投稿者名:Yuuko
Eメール:
URL :
タイトル:
解決しました。
魔界の仮面弁士さん ありがとうございました。

以下のようにして 解決しました。
また vbNullString 以外のもので試した結果はNGでした。


            RetC = WritePrivateProfileString(vbNullString, vbNullString, vbNullString, FileName)  '<<--------------読込む前に 無関係のダミー情報を書込みする。
            DataStr = String(1000, Chr(0))
            RetC = GetPrivateProfileString(ApplicationName, KeyName, Default, DataStr, 1000, FileName)
            If RetC Then
                If InStr(DataStr, vbNullChar) > 0 Then
                    DataStr = Left(DataStr, InStr(DataStr, vbNullChar) - 1)
                End If
            End If