我暫時將一個.zip文件解壓縮到磁盤,我想稍後刪除所有這些文件。在測試期間,我在這個過程中提取了一些TortoiseSVN元數據文件夾。當我的應用程序稍後試圖刪除它時,它的失敗是UnauthorizedAccessException
。
我認爲這是由於TSVNCache監視文件系統並在我想刪除該文件夾時鎖定該文件夾。C#阻止其他進程鎖定您的文件/文件夾
我該如何防止類似的東西?
編輯:下面是一些代碼來說明這個問題好一點:
public class Package : IDisposable {
private bool _disposed;
public string Filename { get; set; }
public DirectoryInfo RootFolder { get; set; }
public Package(string filename, DirectoryInfo rootFolder) {
Filename = filename;
RootFolder = rootFolder;
}
public static Package Expand(string packageFileName, DirectoryInfo targetDirectory) {
FileInfo packageFile = new FileInfo(packageFileName);
string publicKey = Settings.Default.PublicKey;
byte[] publicKeyBytes = Convert.FromBase64String(publicKey);
byte[] packageBytes = File.ReadAllBytes(packageFile.FullName);
byte[] decryptedPackageBytes = Blob.DecryptBlob(packageBytes, publicKeyBytes, false);
// Write result
string outputFolderName = targetDirectory.FullName;
Directory.CreateDirectory(outputFolderName);
ZipFile zipFile = ZipFile.Read(decryptedPackageBytes);
zipFile.ExtractAll(outputFolderName);
Package result = new Package(packageFile.FullName, new DirectoryInfo(outputFolderName));
return result;
}
~Package() {
Dispose(false);
}
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing) {
if(_disposed) {
return;
}
if(disposing) {
RootFolder.Delete(true);
}
// Dispose unmanaged resources.
_disposed = true;
}
}
我會用Package.Expand在使用塊,並通過他們訪問那裏提取的文件(目前我只是循環和打印他們的名稱到控制檯)。當該塊退出並調用Dispose時,我得到關於all-wcprops
的異常。其他,非svn相關的文件被刪除。
創建該文件的用法與嘗試刪除該文件的用法相同。這一切都完成了相同的應用程序。它對其他文件也很好。我只注意到了SVN文件的這種行爲。 – 2011-05-26 14:53:44