

CreateFileでファイルをオープンした後、うっかりCloseHandleせずにプログラムを終了してしまったとします。
するとそのファイルは、Windowsを再起動するまで、削除できなくなりますよね。
これを、再起動せずにクローズする方法ってないもんでしょうか?
もう一度プログラムを実行しても、ハンドルオープンしたままですから、当然CreateFileも失敗しますし……。
よくファイル操作するプログラムを作るのですが、しょっちゅうCloseHandleし忘れて再起動するハメになるので、再起動なしでクローズできる方法があれば非常にありがたいのです。
やっぱり、素直に再起動するしかないんでしょうか。
No.3ベストアンサー
- 回答日時:
回答ありがとうございます。
参考URLを見ました。
VBそのものを終了させればよかったんですか!
今までずっとプログラムだけ終了させてデバッグしていたため、再起動しか方法がないと思い込んでいました。
ひとつ利口になりました。ありがとうございますた。
No.2
- 回答日時:
CloseHandle しなくてもそのプログラムが終了したらクローズされるはずですが。
どのバージョンのWindowsでどのようにCreateFileを使用しているのでしょうか?
また何か排他処理をしているのでしょうか?
回答ありがとうございます。
環境はWindows2000でVB6です。
ファイルオープンは普通に、
lHandle = CreateFile(FileName, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
といった感じでオープンしています。特に排他処理はしていません。
No.1
- 回答日時:
ハンドルクローズ処理はメモリリーク問題と並んでリソース管理の基本ですから、それを怠ること自体がプログラムとして大きな問題になります。
ハンドルをクローズしないとファイルディスクリプタが消費され、システムリソースを圧迫しますから、そういうプログラムを組んではいけません。IPAのセキュアプログラミング講座のリンクを挙げておきます。きっと参考になるでしょう。
解決策を簡単に言えば、クラスのデストラクタを利用し、確実にリソースを解放するということです。もちろんそれならば、MFCを初めから使えば自前でそこらへんを考慮する必要もなくなりますが。
参考URL:http://www.ipa.go.jp/security/awareness/vendor/p …
回答ありがとうございます。
もちろん、きちんとクローズ処理をするのが基本だというのはよくわかっているのですが、デバッグ中についつい途中で終了させてしまったりして、しまった……ということがよくあるのです。
もしも再起動しなくてもファイルをクローズできる方法があるなら楽だなぁ、という都合のよい考えでした質問でした。
あ、それと、質問には書き忘れましたが、言語はVBです。C++はたまに使いますが、あまり知識がありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ノートパソコン Windows 10 動作改善方法 6 2023/04/26 22:30
- Windows 10 Windows10起動しない、エラー0xc0000185修復方法 2 2022/07/14 12:28
- AJAX RPA(PowerAutomate)の実装について 1 2023/07/31 13:46
- デスクトップパソコン windows7を使っているパソコンでの質問です。先日動作が遅く再起動かけると「windowsを起動 9 2022/06/16 21:31
- Windows 7 Media Playerが開かない。ファイルアイコンを右クリックしても「プロパティ」が表示されない。 2 2023/02/05 14:45
- ノートパソコン .dllファイルがありませんと表示される 5 2023/04/30 03:03
- GYAO! You tubeなどでダウンロードした動画ファイルの再生について 7 2023/07/03 16:05
- デスクトップパソコン 「自動修復でPCを修復できませんでした」と表示されPCが起動しないのですが対処法はありますか? 5 2022/05/13 09:16
- Windows 10 更新プログラムの適用を止めたい 4 2022/11/04 01:25
- 防犯カメラ・監視カメラ・小型カメラ MP4の再生 3 2022/05/03 18:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
あるプログラムのコマンドライ...
-
VBAにてメール作成した際、一部...
-
PICマイコンのコピー(クローン...
-
UWSCで指定のフォルダを開きたい。
-
Vba UserFormを前面に出す方法...
-
Excelで4096点以上のFFTの方法
-
閉じるを押してもデバッグが終...
-
読み込み中にアクセス違反が発...
-
OS入ってる機器のソフト・アプ...
-
テキストボックスのエンターキ...
-
ゲーミングPCに入っているAlris...
-
プログラムを終了しても消えな...
-
ドロップダウンリストの文字を...
-
C++でExcel操作
-
ポケコンSHARP PC-G801 の使い方
-
main関数を先頭に置くデメリット
-
Excelに埋め込んだVBAのプログ...
-
未使用の変数を一括検索する方法
-
方対数グラフを書く為の計算方...
-
Javaで原始ピタゴラス数を出す
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あるプログラムのコマンドライ...
-
OS入ってる機器のソフト・アプ...
-
VBAにてメール作成した際、一部...
-
読み込み中にアクセス違反が発...
-
Excelで4096点以上のFFTの方法
-
XnViewにwebpを「いつも開く」...
-
ドロップダウンリストの文字を...
-
PICマイコンのコピー(クローン...
-
「Outlookが他のプログラムによ...
-
Vba UserFormを前面に出す方法...
-
VBAでユーザーフォームが自動的...
-
未使用の変数を一括検索する方法
-
UWSCで指定のフォルダを開きたい。
-
Excelに埋め込んだVBAのプログ...
-
自動クエリとはどういうもので...
-
モジュール、アプリケーション...
-
画像を読み込むのと取り込むの...
-
main関数を先頭に置くデメリット
-
エクセルVBA 検索時に除外を設...
-
WORD印刷できるがEXCE...
おすすめ情報