いよいよラストスパート。ただし、まだ冷静なので、やっつけモードには入っていない。
GnuWin32 の sed を –in-place モードで起動すると、中間ファイル(temporary file)が sed.exe の場所に作成され削除されない(←おい!)。同じように引っかかる人へ。sed が中間ファイルをまきちらしていくのは、あなたの CreateProcess や ShellExec の呼び出しが間違っているわけではない。安心してよろしい。昨日の夕方から、半日無駄な時間を過ごした。
仕方ないので、プログラム中から CreateProcess で呼び出すたびに sed?????? のパターンのファイルを毎回削除することにする(ハードディスクの耐久試験か?)。
まかり間違って、たまたま重要なファイルがこのパターンに一致すると自動的に削除される。自分で掘った落とし穴の場所を忘れないよう、記録する。
void RemoveSedTemp()
{
HANDLE hFind;
WIN32_FIND_DATA FindFileData;
hFind = FindFirstFile("sed??????", &FindFileData);
if( hFind == INVALID_HANDLE_VALUE )
return;
DeleteFile( FindFileData.cFileName );
FindClose( hFind );
return;
}