※ ChatGPTを利用し、要約された質問です(原文:ディスクへの即時アクセス法)
ディスクへの即時アクセス法
このQ&Aのポイント
ディスクへの即時アクセス法について質問があります。
ディスク上のファイルを完全に消去するには、ランダムデータに書き換えてから削除するプログラムを作成しましたが、うまくいきません。
ランダムデータの書き換え後、すぐに削除するとディスク上のファイルが未だにランダムデータのままで残ってしまいます。ディスクに即座にアクセスさせる方法や書き込み終了の確認手段はありますか?
ファイルの内容を完全消去するため、ランダムデータにまず書き換え、その後、ディレクトリから削除するようなプログラムを作ってみました。 プログラム初心者で HSP3 という言語を使っています。
ところが、書き換え直後に削除したのでは、ディスク上のファイルがランダムデータに置き換わらぬまま、ディレクトリから削除されてしまいます(復元ソフトで内容が見えます)。 恐らくはキャッシュのみが書き換えられ、ディスク上に反映されて無いのだと思います。 所望の結果を得るには、書き換えと削除の間に少なくとも30秒の待ち合わせが必要です。 しかも確証は得られません。 もっと、明示的、強制的に、ディスクにアクセスさせる方法は無いでしょうか。 あるいは、ディスクへの書き込みが終了した事を確認する手段は無いでしょうか。 HSP からは API の呼び出しも行えるようです。 宜しくご指南願います。
お礼
再度ありがとうございます。 教えていただきましたAPI関数、試してみました。 「 SetFileTime() や MoveFile()は即座にディスクを書き換えるだろうか。」 より正確に言えば、「 ディスクへの処理が完了するまで関数から抜けないよう になっているか。 プログラムの流れはそこで待ち合わせをするか。」 が気掛かりだったのですが、大丈夫そうですね。 WriteFile()なども、内容の書き換えこそ後回しにせよ、タイムスタンプの更新を 済ませないで、関数を抜けることは無さそうに見えます。ファイルの書換え直後、 FlushFileBuffers()を実行しないで DeleteFile()をした場合ても、削除された ファイルのタイムスタンプは書き換えられているようです。 ファイルの書換え直後、FlushFileBuffers()を実行しないで、SetFileTime() MoveFile()、DeleteFile()と立て続けに行うとどうなるかも見てみました。 削除されたファイル本体の書き換えは不完全でしたが、タイムスタンプやファイル名 は、きちっと変更された後、削除されるようでした。 ありがとうございました。