【发布时间】:2011-05-26 14:19:49
【问题描述】:
我暂时将一个 .zip 文件解压缩到磁盘,我想稍后删除所有这些文件。在测试过程中,我提取了一些 TortoiseSVN 元数据文件夹。当我的应用程序稍后尝试删除它们时,它以UnauthorizedAccessException 失败。
我认为这是由于 TSVNCache 监视文件系统并在我想删除它时锁定了该文件夹。
我怎样才能防止这样的事情发生?
编辑:这里有一些代码可以更好地说明问题:
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;
}
}
我会在 using 块中使用 Package.Expand 并在那里访问提取的文件(目前我只是循环它们并将它们的名称打印到控制台)。当块退出并调用 Dispose 时,我收到有关 all-wcprops 的异常。不过,其他与 svn 无关的文件会被删除。
【问题讨论】: