1

これはデバッグが非常に難しいことがわかっています。私の状況から始めましょう:

.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" の両方のメンバーであるユーザーが割り当てられます。

追加情報が必要な方がいらっしゃいましたらお知らせください。

4

2 に答える 2

1

サーバーのイベントログを見てください。そこに例外\エラーメッセージが表示される場合があります。

フォルダーとそのすべてのコンテンツを 1 回の呼び出しで削除するように使用することを検討できDirectory.Delete(path, true)ます (コードを正しく理解していない場合を除きます)。

使用中のファイルを見てください。ファイルが使用中の場合、OS はそのファイルを削除できません。そのため、すべてのファイルを正しくリリースしていることを確認してください。

最後に、ファイルを強制的に使用しないようにすることはできないため、不要なファイルやフォルダーを削除するために毎晩実行されるクリーンなスクリプトを作成することになる可能性があります。

于 2013-01-11T10:54:23.627 に答える
0

解凍したファイルには、一時的な宛先フォルダーを使用する必要があります。それらが使用されたら、それらを削除してみてください。それが失敗した場合は、そのままにしておいてください。非一時フォルダーへの書き込みの許可は、iisにあるプレゼンテーションアプリに実際に付与されるべきではありません。

于 2013-01-11T15:53:45.440 に答える