iniファイル書き換え後の読み込みについてNo.03617
SAS さん 03/02/24 13:24
 
ini ファイルの読み込みに関して、再現性が一定しない、妙な現象に当りました。
ライブラリでも公開している、拙作の行頭引用符挿入&削除マクロを改造しているときに
発生して気付いたのですが、マクロで使用している、ini ファイルの設定値を秀丸で
書き換えてから、マクロでその設定値をgetininumで読み込んだとき、書き換えたはずの
ini ファイルの値が、getininumの取得値に反映しないで書き換え前の値を読み込んで
しまうことがあるのです。
これは毎回再現するわけではなく、また、何度かマクロ実行を行うと正常に書き換えた
値を、読み込めるようになったりします(この回数も一定ではない)。
処理的には不具合で読み間違えることのないようないところで、マクロのバグで
読み間違えているということはないと思ったのですが、念の為、マクロ内で、

$inifile = "linyom.ini";
(処理略)
$inifile = currentmacrodirectory + "\\" + $inifile;
(処理略)
#nomenu = getininum($inifile, "Config", "nomenu");
message str(#nomenu);
という形で、getininumの直後にmaggage文で値を表示してみて確認してみたところ、
やはり、読み違える(ini ファイルを変更以前の値を読んでしまってる)ことがあり
ました。

最近、うちの Windows環境自体が若干不安定なので、環境の問題という可能性も
あるのですが、他の環境で同様のinifile の読み込み失敗が発生することって、
あるでしょうか?

尚、秀丸のバージョンは Ver3.19です。

[ ]
RE:03617 iniファイル書き換え後の読み込No.03618
安久津 さん 03/02/24 16:42
 
あくつです。

>発生して気付いたのですが、マクロで使用している、ini ファイルの設定値を秀丸で
>書き換えてから、マクロでその設定値をgetininumで読み込んだとき、書き換えたは
>ずの
>ini ファイルの値が、getininumの取得値に反映しないで書き換え前の値を読み込んで
>しまうことがあるのです。
秀丸で ini ファイルを編集して、マクロで値を読もうとすると、大抵間違った値に
なります。場合によっては、ini ファイルの編集自体ができなかったりもします。

>最近、うちの Windows環境自体が若干不安定なので、環境の問題という可能性も
>あるのですが、他の環境で同様のinifile の読み込み失敗が発生することって、
>あるでしょうか?
昔から、そんな感じでした。

値を読み込む前に、何でもいいから書き込んでやると
間違える頻度が減ったような気がします。# 気休めだけだったりして (^^;)

$inifile = "linyom.ini";
(処理略)
$inifile = currentmacrodirectory + "\\" + $inifile;
(処理略)
writeinistr $inifile, "please","refresh","ini"; // <- こいつ。
#nomenu = getininum($inifile, "Config", "nomenu");
message str(#nomenu);

あと、マクロで writeini(str|num) して、マクロで getini(str|num) するなら、
それ程間違えることもなかったように記憶しています。

[ ]
RE:03618 iniファイル書き換え後の読み込No.03619
SAS さん 03/02/24 21:20
 
安久津さん、詳しいレス痛み入ります。ありがとうございました。


> 秀丸で ini ファイルを編集して、マクロで値を読もうとすると、大抵間違った値に
> なります。場合によっては、ini ファイルの編集自体ができなかったりもします。

> 昔から、そんな感じでした。
そうですか。今まではっきり気付いてなかっただったんですね。
そういえば、前にもあったような気もしてきました(^^;
でも、今回試してみたら、うちでは大抵っていうほどではなかったですから、
環境とかによるんでしょうかね。



秀丸でiniファイルにセーブした値が、マクロとはいえ、そのiniファイルから
正しく読めないことがあるというのは、どうも腑に落ちないんですが、
なんともならないもんなのでしょうか?
>秀丸担当様

あるいは、確実な回避方法とか法則性とか無いんでしょうか?
(できればマクロ側での確実な回避方法があれば一番ですが)。
それが、何かあればマクロの説明書に、注意点として書いておくんですが・・・

               SAS xxx@japan.email.ne.jp

[ ]
RE:03619 iniファイル書き換え後の読み込No.03620
Arimac さん 03/02/24 23:02
 
iniファイルの読み込みはWindowsがキャッシングしている筈なので
APIのWritePrivateProfileString(=writeinistr?)を使わずに
ファイルに直接書き込んでも、getinistrではキャッシングしている
内容を読み出してしまうと思います。
Windowsの動作なんで、秀丸エディタでは対処のしようが無いと
思います。
マクロ側の対策としては別のiniファイルをgetinistrしてみる
と良いかもしれません。(試してはいないけど)

[ ]
RE:03620 iniファイル書き換え後の読み込No.03621
SAS さん 03/02/25 00:51
 
Arimac さん、回答ありがとうございます。

GetPrivateProfileStringとWritePrivateProfileStringはパラメーターへの
NULL指定を使えば明示的に、バッファへの読み込みや、ディスク書き込みができ
たと思うのですが、それでやっても起こる問題なんでしょうか?

僕が、勘違いしていたら、ごめんなさい。

               SAS xxx@japan.email.ne.jp

[ ]
RE:03621 iniファイル書き換え後の読み込No.03622
SAS さん 03/02/25 01:24
 
ごめんなさい。
今手元に資料が何も無くて、ちゃんと調べずにうろ覚えで書いたので、
間違えました。
多分、GetPrivateProfileStringで必ずファイルからキャッシュへ
読み込む方法ってなかったですね。すいません。

うん?まだ他にも何か勘違いしているような気がする・・・
後で、整理します。03621の書き込みは忘れてください(^_^;
>Arimac さん&ALL

               SAS xxx@japan.email.ne.jp

[ ]
RE:03622 iniファイル書き換え後の読み込No.03624
秀丸担当 さん 03/02/25 17:20
 
>多分、GetPrivateProfileStringで必ずファイルからキャッシュへ
>読み込む方法ってなかったですね。すいません。

キャッシュからファイルへ書き込むのはありますが、ファイルから
キャッシュへはないと思います。
でもwriteinistrをやると安定するということは、
WritePrivateProfileStringでキャッシュからファイルへ書き込む
操作を入れるといいのかも。再現しないので正確なことがわかり
ません。

[ ]
RE:03624 iniファイル書き換え後の読み込No.03627
SAS さん 03/02/26 19:41
 
秀丸担当様、
返答、どうもありがとうございました。

そのあたりのこと、注意点として、マクロ説明書に書くことにします。

               SAS xxx@japan.email.ne.jp

[ ]