首页 > 解决方案 > 使用 ZipFile::CreateFromDirectory() 在 C++/CLI 中压缩时删除的文件生成异常?

问题描述

我在 Win10 上使用 .NET 4.5.2 使用 C++/CLI。我用 VS2019 16.1.6 开发(我知道...)

我目前正在调试一个完成以下操作的应用程序:

  1. 在给定目录中创建哨兵LOCK 文件。
  2. 一些工作已经完成。
  3. 哨兵文件LOCK删除。
  4. 然后System::IO::Compression::ZipFile::CreateFromDirectory()被调用。请注意,它在大多数情况下都能完美运行。

在这个错误中,当CreateFromDirectory被调用时,会抛出一个 IOException 告诉“进程无法访问文件...锁定,因为它正在被另一个进程使用。

此时,假定已删除哨兵文件LOCK。实际上我使用以下代码删除了它:

System::IO::File::Delete( "LOCK" );

while ( System::IO::File::Exists( "LOCK" )
{
    System::Threading::Thread::Sleep( 20 );
}

我使用这个片段是因为我已经遇到了“未真正删除”文件的问题(而由于延迟更大,在单步调试时不会出现这个问题......)但是现在,我不知道......

我的假设如下:

  1. CreateFromDirectory()开始其工作时,哨兵文件仍然存在于某个地方(???)并由方法列出。

  2. 当需要压缩它时(或在压缩过程中),它实际上被删除了。因此例外...

所以我的问题是:

  1. 我的假设可能吗?
  2. 有没有办法保护执行(工作流程)不受此影响?
  3. 还有什么想法吗?

在此先感谢您的帮助!

标签: .netc++-clivisual-studio-2019zipfile

解决方案


实际上,@HansPassant 的评论帮助我找到了问题所在。但锁定文件 LOCK 的不是反恶意软件,而是应用程序本身。毕竟简单的工作流问题......由 a 创建的文件FileStream从未在特定的工作流路径中关闭/处置/删除,这会导致崩溃。

谢谢你的评论。


推荐阅读