有什么方法可以将目录压缩成单个文件

时间:2013-08-20 09:00:38

标签: c++ windows file winapi directory

不知道怎么问,所以我会解释一下情况。

我需要存储一些压缩文件。最初的想法是创建一个文件夹并存储所需数量的压缩文件,并创建一个包含每个压缩文件数据的文件。

但是,我不允许创建多个文件,只能有一个文件。我决定创建一个压缩文件,它有一个关于更多数据的标题,并在标题后保留压缩数据。但是这种选择有缺点,例如在创建它之后编辑这样的文件需要很长时间,因为即使我想再添加一个小文件也必须完全重写它。

因此,正如我想象的那样,我需要创建具有一些特定属性的文件夹并在其中创建尽可能多的文件。这甚至可能吗?

我正在为Windows创建一个应用程序,因此我可以使用适用于Windows的任何内容,而且我使用C ++进行编码。

注意:需要单个文件,因为例如,它将通过电子邮件发送并附加许多文件不是​​理想的解决方案。

注意:我不需要压缩算法,我需要一些方法来有效地将所有内容存储在单个文件中。

3 个答案:

答案 0 :(得分:1)

您可以创建SQLite数据库或SQL Server Compact Edition数据库(驻留在单个.sdf文件中),并将所有数据存储为BLOB。数据库管理系统应该足够简单,可以与应用程序的其他二进制文件一起部署。

对于SQL Server Compact,我不确定从非托管代码(C ++)使用它有多容易。在.NET中这很容易,但我确信它也可以用于C ++,但是mdash会进行一些研究。

至少,this Stack Overflow question涉及如何通过OLE DB提供程序从C ++连接到这样的数据库。

答案 1 :(得分:0)

如何使用7zip SDK并将所有内容保存在zip文件中?

http://www.7-zip.org/sdk.html

答案 2 :(得分:0)

作为另一种选择,您可以使用tar文件:自定义标头的文件条目,包含其他条目的信息(压缩等),所有文件作为tar文件中的条目。我不确切知道如何用库函数替换一个条目(这里我获得了至少可以使用linux上的gnu tar http://www.karkomaonline.com/index.php/2005/03/basic-tar-usage-gnu-tar/命令行实用程序的信息),但似乎没有重新创建它是可能的整个档案。 我认为你必须首先创建更大的虚拟条目,以便以后有足够的可用空间,这样这些条目就可以用所有需要的数据替换。