c++ - 同时访问 ZIP 文件中的不同文件夹

标签 c++ multithreading zip file-access

我需要文件访问权限以同时从不同线程读取和写入相同的 ZIP 存档。

每个线程在存档中都有自己的子目录,因此不会发生冲突,但我认为操作系统不关心这一点。

对于 ZIP 操作,我使用 libzip。我如何执行访问?我需要处理一些特别的事情吗?

我可以在应用程序启动时解压存档并在退出时压缩它,但我更愿意直接对存档进行操作,这就是我问这个问题的原因。

最佳答案

并行解包不应该那么困难,但打包文件肯定是不平凡的/

不幸的是,如果您使用的是 ZIP 格式,目录名称并不重要 - 文件存储位置的标题只是一个结构,其中包含路径和文件名作为一个整体,并且不存在不同的目录在 zip 文件中。

数据也好不到哪里去,因为每个文件的数据只是作为一个连续的数据流存储在前一个文件之后、下一个文件之前。

当然可以在准备好压缩数据的地方制作一个 zip 存档功能,一旦数据完成,分配空间并将 header 添加到目录中——这两者都处于某种锁定状态,然后数据可以在没有锁的情况下写入实际文件[尽管我不确定在不使用锁的情况下写入文件中的不同位置效果如何]。

(在维基百科here 中有很好的描述,但如果你没有研究过这些东西,可能并不完全清楚不同数据结构的后果是什么)

关于c++ - 同时访问 ZIP 文件中的不同文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18035068/

相关文章:

java - 无法提取从 Java 创建的 zip 文件

c++ - 更改xcode中特定代码字的颜色

c++ - 如何使用 POCO 解析 xml 文件并将特定节点提取到 std::string?

c++ - 具有值语义的性能

multithreading - 官方 OpenCL 2.2 标准是否支持 WaveFront?

c - 如何通过蒙特卡洛模拟充分利用多线程?

Python 在压缩大文件时使用 ZIP64 扩展名

c++ - 包含 header 后的Stringstream编译错误

objective-c - 结束在辅助线程中运行的 while 循环?

linux 上的 php zip 安装