3

アプリケーションでSharpSvnライブラリを使用しています。自動化された統合テストの一環として、テスト リポジトリを作成し、作業コピーをチェックアウトし、いくつかのテストを実行してから、リポジトリと作業コピー フォルダーの両方を削除します。

ただし、単純なDirectory.Delete(workingCopyPath, true);場合は常に「 Access to the path 'entries' is denied.UnauthorizedAccessException 」というメッセージが表示されます。次のコードでエラーを再現できます。

     using (var svnClient = new SvnClient())
     {
        svnClient.CheckOut(
           new SvnUriTarget(new Uri(repositoryPath)), workingCopyPath);
     }
     Directory.Delete(workingCopyPath, true);

このエラーは引き続き発生します

  • 以前の統合テストの実行によって作成された作業コピーを削除してみてください
  • Thread.Sleep削除しようとする数秒前

エクスプローラーを使用して一時作業コピーを手動で削除しても、エラーは発生しません。

ここで何がうまくいかないのですか?サブバージョンの作業コピーをプログラムで削除する適切な方法は何ですか?

4

1 に答える 1

9

Directory.Delete読み取り専用ファイルの削除を拒否することが判明しました。

このメソッドを使用して、ディレクトリを削除します。

private void DeleteDirectory(string path)
{
   var directory = new DirectoryInfo(path);
   DisableReadOnly(directory);
   directory.Delete(true);
}

private void DisableReadOnly(DirectoryInfo directory)
{
   foreach (var file in directory.GetFiles())
   {
      if (file.IsReadOnly)
         file.IsReadOnly = false;
   }
   foreach (var subdirectory in directory.GetDirectories())
   {
      DisableReadOnly(subdirectory);
   }
}
于 2009-12-30T20:36:30.680 に答える