重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

CreateFileでファイルをオープンした後、うっかりCloseHandleせずにプログラムを終了してしまったとします。
するとそのファイルは、Windowsを再起動するまで、削除できなくなりますよね。
これを、再起動せずにクローズする方法ってないもんでしょうか?
もう一度プログラムを実行しても、ハンドルオープンしたままですから、当然CreateFileも失敗しますし……。

よくファイル操作するプログラムを作るのですが、しょっちゅうCloseHandleし忘れて再起動するハメになるので、再起動なしでクローズできる方法があれば非常にありがたいのです。
やっぱり、素直に再起動するしかないんでしょうか。

A 回答 (3件)

こういうことでは?



参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=282478
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

参考URLを見ました。
VBそのものを終了させればよかったんですか!
今までずっとプログラムだけ終了させてデバッグしていたため、再起動しか方法がないと思い込んでいました。
ひとつ利口になりました。ありがとうございますた。

お礼日時:2003/03/17 09:04

CloseHandle しなくてもそのプログラムが終了したらクローズされるはずですが。


どのバージョンのWindowsでどのようにCreateFileを使用しているのでしょうか?
また何か排他処理をしているのでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

環境はWindows2000でVB6です。
ファイルオープンは普通に、
lHandle = CreateFile(FileName, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
といった感じでオープンしています。特に排他処理はしていません。

お礼日時:2003/03/16 00:08

ハンドルクローズ処理はメモリリーク問題と並んでリソース管理の基本ですから、それを怠ること自体がプログラムとして大きな問題になります。

ハンドルをクローズしないとファイルディスクリプタが消費され、システムリソースを圧迫しますから、そういうプログラムを組んではいけません。

IPAのセキュアプログラミング講座のリンクを挙げておきます。きっと参考になるでしょう。

解決策を簡単に言えば、クラスのデストラクタを利用し、確実にリソースを解放するということです。もちろんそれならば、MFCを初めから使えば自前でそこらへんを考慮する必要もなくなりますが。

参考URL:http://www.ipa.go.jp/security/awareness/vendor/p …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

もちろん、きちんとクローズ処理をするのが基本だというのはよくわかっているのですが、デバッグ中についつい途中で終了させてしまったりして、しまった……ということがよくあるのです。
もしも再起動しなくてもファイルをクローズできる方法があるなら楽だなぁ、という都合のよい考えでした質問でした。
あ、それと、質問には書き忘れましたが、言語はVBです。C++はたまに使いますが、あまり知識がありません。

お礼日時:2003/03/16 00:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!