それは、C#で止められない、削除を行うことは可能ですか? (Compact Frameworkの)
-
26-09-2019 - |
質問
私は確信して、そのディレクトリのすべてのファイルが削除されていることを確認したいフォルダを考えます。 私は多分そこIOExceptionsまたはアクセス拒否エラーを知っているが、どのようにちょうど脇に置いておくか、私が実際に削除できるようにファイルの私の削除を続けますか?これは可能ですか? 私が始めることができる場所に私にいくつかの光を当てるしてください。
解決
再帰検索の質問に答えます
void delete(DirectoryInfo di) {
foreach(DirectoryInfo di2 in di.GetDirectories()) {
delete(di2);
}
foreach(FileInfo fi in di.GetFiles()) {
fi.Delete();
}
}
...上記示唆したように、してみてください...様々な部分の周りのキャッチは、特定のファイルを削除できないことにも対応します。
他のヒント
は、あなたが例外をスローするものをスキップし、(再帰的にsubdirections用)ファイルのリストを作成し、それらを個別に削除できます。
IFあなたのディレクトリ内のファイルをループし、あなたがしても、例外後も継続することができますのtry / catch内の各1を削除します。あなたはそれが失敗した失敗したら、その後全体のディレクトリを削除しようとする。
編集:コードの要求に応じて、
private void DeleteFiles(DirectoryInfo Directory)
{
bool AllFilesDeleted = true;
foreach(FileInfo oFile in Directory.GetFiles())
{
try
{
oFile.Delete();
}
catch (Exception ex) { AllFilesDeleted = false; }
}
foreach (DirectoryInfo oDirectory in Directory.GetDirectories())
{
DeleteFiles(oDirectory);
}
if (AllFilesDeleted)
{
try
{
Directory.Delete();
}
catch (Exception ex){}
}
}
IOExceptionsまたはアクセスがエラーを拒否されましたが、どのようにちょうど脇に置いておくと、私の削除を続けるん。
えっ?あなたはIOの問題を抱えているか、ファイルへのアクセス権を持っていない場合、はのそれらを削除することはできません。彼らは例外です。彼らは「なぜだ、ここでちょっと、これは間違っていた、そして」あなたが言っています。彼らは、の理由のあなたの削除は最初の場所では機能しませんでした。
は、あなただけ無視することができることを丁寧警告メッセージはありませんあなたは少し@Will Aが提案するもので順序を変更し、ディレクトリ自体を削除する行を追加する場合 - それはトリックを行う必要があります。
のようなもの static void delete(DirectoryInfo di)
{
foreach (FileInfo fi in di.GetFiles())
{
try
{
fi.Delete();
}
catch (Exception)
{
}
}
foreach (DirectoryInfo di2 in di.GetDirectories())
{
delete(di2);
}
try
{
di.Delete();
}
catch (Exception)
{
}
}
それは空のフォルダをクリアする必要があります。