- ベストアンサー
CloseHandle以外でファイルを閉じる方法
CreateFileでファイルをオープンした後、うっかりCloseHandleせずにプログラムを終了してしまったとします。 するとそのファイルは、Windowsを再起動するまで、削除できなくなりますよね。 これを、再起動せずにクローズする方法ってないもんでしょうか? もう一度プログラムを実行しても、ハンドルオープンしたままですから、当然CreateFileも失敗しますし……。 よくファイル操作するプログラムを作るのですが、しょっちゅうCloseHandleし忘れて再起動するハメになるので、再起動なしでクローズできる方法があれば非常にありがたいのです。 やっぱり、素直に再起動するしかないんでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こういうことでは?
その他の回答 (2)
CloseHandle しなくてもそのプログラムが終了したらクローズされるはずですが。 どのバージョンのWindowsでどのようにCreateFileを使用しているのでしょうか? また何か排他処理をしているのでしょうか?
お礼
回答ありがとうございます。 環境はWindows2000でVB6です。 ファイルオープンは普通に、 lHandle = CreateFile(FileName, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) といった感じでオープンしています。特に排他処理はしていません。
- ShaneOMac
- ベストアンサー率39% (356/898)
ハンドルクローズ処理はメモリリーク問題と並んでリソース管理の基本ですから、それを怠ること自体がプログラムとして大きな問題になります。ハンドルをクローズしないとファイルディスクリプタが消費され、システムリソースを圧迫しますから、そういうプログラムを組んではいけません。 IPAのセキュアプログラミング講座のリンクを挙げておきます。きっと参考になるでしょう。 解決策を簡単に言えば、クラスのデストラクタを利用し、確実にリソースを解放するということです。もちろんそれならば、MFCを初めから使えば自前でそこらへんを考慮する必要もなくなりますが。
お礼
回答ありがとうございます。 もちろん、きちんとクローズ処理をするのが基本だというのはよくわかっているのですが、デバッグ中についつい途中で終了させてしまったりして、しまった……ということがよくあるのです。 もしも再起動しなくてもファイルをクローズできる方法があるなら楽だなぁ、という都合のよい考えでした質問でした。 あ、それと、質問には書き忘れましたが、言語はVBです。C++はたまに使いますが、あまり知識がありません。
お礼
回答ありがとうございます。 参考URLを見ました。 VBそのものを終了させればよかったんですか! 今までずっとプログラムだけ終了させてデバッグしていたため、再起動しか方法がないと思い込んでいました。 ひとつ利口になりました。ありがとうございますた。