我正在临时将一个.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无关的文件也会被删除。
发布于 2011-05-27 04:18:52
尽管我仍然对我的问题的答案感兴趣,但我的问题与文件锁定无关。在本例中,UnauthorizedAccessException只是表示一个只读文件。
这里讨论了如何解决这个问题:How do I delete a directory with read-only files in C#?
发布于 2011-05-26 22:36:16
您确定您已正确处理了您的句柄,并且运行该应用程序的用户有权删除它吗?
发布于 2011-05-26 23:12:37
我对tortiose-Git也有同样的问题。
当我遇到锁定问题时,我会使用taskmanager来终止TGitCache-Process (或者在您的例子中是TSVNCache-process)
在短暂的暂停后,TGitCache再次启动,我可以继续使用乌龟。
您还可以考虑excluding certain directories from tortois-svn supervision
https://stackoverflow.com/questions/6140098
复制相似问题