RemoveDirectory()
は、削除のためのディレクトリのマークとしてのみ記載されています。私はディレクトリが実際に削除されていることを確認しなければならないアプリケーションがあります(同じ名前の新しいディレクトリを作成するか、ディレクトリを再帰的に削除するためです)。Windowsでディレクトリを削除する方法
最初に考えたのは、ディレクトリがまだ存在するかどうかをテストするためにGetFileAttributes()
を使用するか、削除のためにSHFileOperation()
を使用することでした。しかし、長いテストを実行すると、いずれの時点で両方のソリューションが失敗する - CreateDirectory()
が失敗します。
解決方法はありますか?
おそらく、ディレクトリの名前を(ランダムな名前に)変更して、削除のマークを付けることができます。最終的に削除されます。その後、元の名前のディレクトリを常に作成できます。 – rveerd
ディレクトリで何かしようとすると、「アクセスが拒否されました」というエラーが表示されます。それはあなたが知っている方法です。解決策、まあ、いいえ。ファイルを上書きしようとすることと根本的に異なるわけではなく、そのファイルはすでに別のプロセスによって使用されています。あなたはそのプロセスを見つけたり、それが完了するまで待って解決しなければなりません。それは診断するのが難しい傾向がある自発的な原因です。アンチマルウェアや、プログラムの現在の作業ディレクトリを同じディレクトリに設定するなどです。 –
誰が「削除のためだけにディレクトリをマークする」と言っていますか? MSDNでは、「RemoveDirectory関数は、閉じるときに削除のためにディレクトリをマークします。したがって、ディレクトリへの最後のハンドルが閉じられるまで、ディレクトリは削除されません。つまり、ディレクトリが使用中の場合は削除されません。しかし、 "最後のハンドルはdir"が閉じていると、削除されます - おそらくすぐに? "即座に"可能性がありますが、それでも必ずしも_synchronously_であるとは限りません。_stackoverflow.com/questions/2809788/impossible-to-remove-directory?rq=1 – i486