いよいよラストスパート。ただし、まだ冷静なので、やっつけモードには入っていない。

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;
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です