首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#防止其他进程锁定您的文件/文件夹

C#防止其他进程锁定您的文件/文件夹
EN

Stack Overflow用户
提问于 2011-05-26 22:19:50
回答 4查看 1.5K关注 0票数 0

我正在临时将一个.zip文件解压缩到磁盘,并希望稍后删除所有这些文件。在测试期间,我在这个过程中提取了一些TortoiseSVN元数据文件夹。当我的应用程序稍后尝试删除它们时,它失败了,并显示了一个UnauthorizedAccessException

我认为这是因为TSVNCache监视文件系统,并且在我想要删除该文件夹时锁定了它。

我怎么才能防止这样的事情发生呢?

编辑:这里有一些代码可以更好地说明这个问题:

代码语言:javascript
复制
  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无关的文件也会被删除。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-27 04:18:52

尽管我仍然对我的问题的答案感兴趣,但我的问题与文件锁定无关。在本例中,UnauthorizedAccessException只是表示一个只读文件。

这里讨论了如何解决这个问题:How do I delete a directory with read-only files in C#?

票数 0
EN

Stack Overflow用户

发布于 2011-05-26 22:36:16

您确定您已正确处理了您的句柄,并且运行该应用程序的用户有权删除它吗?

票数 0
EN

Stack Overflow用户

发布于 2011-05-26 23:12:37

我对tortiose-Git也有同样的问题。

当我遇到锁定问题时,我会使用taskmanager来终止TGitCache-Process (或者在您的例子中是TSVNCache-process)

在短暂的暂停后,TGitCache再次启动,我可以继续使用乌龟。

您还可以考虑excluding certain directories from tortois-svn supervision

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6140098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档