在C++CLI中使用ZipFile::CreateFromDirectory()进行压缩时,删除文件产生异常?

问题描述 投票:-1回答:1

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

我目前正在调试一个应用,在这个应用中进行了以下操作。

  1. A 哨兵 在给定的目录下创建LOCK文件。
  2. 一些工作就完成了。
  3. 哨兵 文件LOCK被删除。
  4. 然后 System::IO::Compression::ZipFile::CreateFromDirectory() 被称为。请注意,它在大多数时候都能完美地工作。

在这个错误中,当 CreateFromDirectory 调用,就会抛出一个IOException,告诉"进程不能访问文件... LOCK,因为它正在被另一个进程使用。"

在这一点上。哨兵 文件LOCK被认为是被删除的。事实上,我用这段代码删除了它。

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

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

我使用这段代码是因为我已经有了 "没有真正删除 "文件的问题 (而这个问题在进入调试时从未发生过,因为有更大的延迟... ) 但现在,我不知道... ...

我的假设如下。

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

  2. 当要压缩它的时候(或在压缩过程中),它实际上被删除了。因此,异常...

所以我的问题是

  1. 我的假设是否可行?
  2. 有什么方法可以保护执行(工作流)不受此影响?
  3. 有其他的想法吗?

先谢谢你的帮助

.net c++-cli visual-studio-2019 zipfile
1个回答
0
投票

其实,@HansPassant的评论帮我找到了问题所在。不过锁定LOCK文件的不是反恶意软件,而是应用程序本身。毕竟是简单的工作流程问题... 这个文件,是由一个 FileStream 在特定的工作流路径中从来没有被关闭过disposeddeleted,这个导致了崩溃。

谢谢你的评论。

© www.soinside.com 2019 - 2024. All rights reserved.