これはデバッグが非常に難しいことがわかっています。私の状況から始めましょう:
.Net 4 を使用して C# で開発された ASP.Net MVC3 Web アプリがあります。システムの一部により、ユーザーは zip ファイルをアップロードできます。これで問題なく、zip ファイルが保存されます。また、定期的に新しい zip ファイルを探して展開し、何らかの作業を行ってから再圧縮してバックアップする Windows サービスもあります。(私System.IO.Compression
はジッパーのものに使用します)。この部分はすべて正常に機能し、処理後、次のような構造になります。
Object1Folder
\_ Input.zip
\_ ExtractedFolder
\_ Output.zip
ユーザーがアイテムを削除できる機能もあり、要件はオブジェクト フォルダー (この場合は「Object1Folder」) を削除することです。すべてのサブフォルダーとファイルを削除する必要があるため、次の再帰関数を使用して作業を行います...
public static void DeleteDirectory(string directoryPath)
{
string[] files = Directory.GetFiles(directoryPath);
string[] directories = Directory.GetDirectories(directoryPath);
foreach (string file in files)
{
File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);
}
foreach (string directory in directories)
{
DeleteDirectory(directory);
}
Directory.Delete(directoryPath, true);
}
これは最初は次のように呼ばれます...
DeleteDirectory("C:\\Objects\\Object1Folder");
しかし、うまくいきません!まず、エラーがスローされず、コードが正常に実行されたように見えますが、これは面倒です。しかし、その結果、「Input.zip」ファイルのみが削除されます。「ExtractedFolder」と「Output.zip」ファイルが残ります。
私が知る限り、コードは健全です。残っているファイルとフォルダを削除しようとしない場合だとわかりません。残念ながら、ターゲット サーバーに VS がインストールされていないため、コードをステップ実行して、それらを削除しようとしていることを確認できません。ただし、これが潜在的な問題であることがわかるかどうかを指摘してください。
これまでのところ、これは何らかの権限の問題であると推測できます。(おそらく) 興味深いのは、問題を手動でクリーンアップすると (つまり、Windows エクスプローラーで "Object1Folder" を削除すると、"拒否されました" と表示され、管理者権限ボタンで確認するように求められることです。
皆さんが問題を解決するのが難しいことは承知していますが、この問題を解決するために確認すべきことを探しています。どのようなものに適切なアクセス許可があることを確認する必要がありますか? 必要なアクセス許可は何ですか? この問題をデバッグする良い方法はありますか? これらのファイルが他の何かに保持されている場合 (おそらく Windows サービスの抽出プロセスから)、これが問題であるかどうかを確認するにはどうすればよいですか?
役立つかもしれないそのサーバーに関する情報: 「Windows Server 2008 R2 Datacenter」をサービス パック 1 で実行しており、64 ビットです。Web アプリには、"Users" と "IIS_IUSRS" の両方のメンバーであるユーザーが割り当てられます。
追加情報が必要な方がいらっしゃいましたらお知らせください。