【问题标题】:What are ways to compress directory into single file将目录压缩成单个文件的方法有哪些
【发布时间】:2013-08-22 06:19:56
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 您可以使用Structured Storage 来实现这一点(但您不能对它们使用常规文件函数)。
  • 由于是Windows,所以可以使用Alternate Data Streams
  • 出于好奇,为什么您需要创建比您允许的更多的文件,以及对一个文件的限制首先来自哪里?在您创建一个复杂的解决方案(从长远来看,这将更加难以维护)之前,您是否已验证 (a) 您不能以不同的方式设计您的程序,或者 (b) 你不能说服你的客户允许你创建一个常规目录(毕竟这可能是他们最好的)?
  • @stakx 常规目录是不允许的,但我已经为单个二进制文件创建了结构,但速度不快。
  • @user2623967:我已经明白了;我的问题是:为什么不允许这样做,为什么你仍然需要这样做? (有时质疑现状并与/说服人们接受不同的做事方式是值得的,从长远来看这可能会更好。)

标签: c++ windows file winapi directory


【解决方案1】:

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

对于 SQL Server Compact,我不确定从非托管代码 (C++) 中使用它是否容易。在 .NET 中这很容易,但我很确定它也可以在 C++ 中完成 &mdash 需要一些研究。

至少,this Stack Overflow question 介绍了如何通过 OLE DB 提供程序从 C++ 连接到此类数据库。

【讨论】:

  • SQLiteC++ 一起使用没有问题,但不确定老板是否想在项目中添加更多东西,因为他是老板如果你明白我的意思,有时他会做出很好的决定,有时不是那么好:)
  • @user2623967:是的,我愿意。 ;-) 有时它有助于将您的问题放在项目成本方面:重新发明轮子可以节省您对 3rd 方库的依赖,但它通常更昂贵(需要更多的开发时间)。并且在维护期间可能会花费更多,因为您自己的解决方案可能存在错误。 SQLite,OTOH,是一款比较成熟的产品,可以期待效果很好。
  • 你的答案可能是最好的,但SQLite 没有给出压缩比,压缩和解压缩的时间也没那么重要,所以我只保留一个文件。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-12
      • 2023-03-24
      • 2014-10-23
      相关资源
      最近更新 更多