问题标签 [compound-file]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1235 浏览

c# - IStorage 的复合文件实现是线程安全的吗?

我正在使用来自 C# (StgCreateDocfile) 的 IStorage 的复合文件实现。

如果我自己同步读取和写入,从多个线程访问一个 IStorage / IStream 实例是否安全?或者这里是否有任何可能有问题的 COM 问题?

例如,我可以安全地调用 EnumElements 来获取存储中的所有流,同时(并且来自不同的线程)创建和写入一个新流吗?

我已经为我的实现编写了一个压力测试,它没有显示任何问题,但我需要 100% 确定。我在 MSDN 文档中没有找到此信息。

0 投票
4 回答
1965 浏览

c++ - 是否有 Windows 复合文件的开源替代方案?

我正在尝试将几个文件保存到一个容器文件中。这些文件可以稍后修改,这意味着容器可能必须扩大。用户应该只将此容器视为文件系统中的单个文件。该应用程序是用 C++ 编写并在 Windows 上运行,但文件也应该可以移植到其他平台。

容器格式的要求是:
1.大小:允许大于 4GB 的文件。
2.可移植性:在其他平台上打开容器文件应该是可行的。
3.性能:更改容器内的文件时,只有代表该特定文件的“块”可以更改。特别是,可能不会完全重写该文件。
4.结构:它应该提供一个目录结构,允许建立文件和目录的层次结构。

省略要求 1.) 和 2.) 复合文件(如 Word 和 Excel 使用的)非常适合。

当然,可以设计一个满足所有要求的 API,但我想知道是否已经有一些开源解决方案可以解决这个问题?

有什么建议么?

0 投票
5 回答
9068 浏览

c - 用于 C 的开源嵌入式文件系统(或单文件虚拟文件系统,或结构化存储)库

我不确定这样的“通用”名称可能是什么。我正在寻找一个库,它为我提供了一种文件格式,可以将不同类型的二进制数据存储在一个扩展的单个文件中。

  • 开源,非 GPL (LGPL ok)
  • C接口
  • 文件格式是单个文件
  • 使用类似 POSIX 的文件 API 中的多个文件(或使用其他 API 中的多个“blob”)
  • 文件/结构编辑就地完成
  • 可靠第一,性能第二

示例包括:

上述问题:

  • whefs 似乎不是很成熟,但最能描述我所追求的
  • HDF、CDF、NetCDF 是可用的(也非常可靠和快速),但它们相当复杂,我不完全相信它们支持不透明的二进制“blob”

编辑:
忘了提另一个相关问题:
C/C++ 中的简单虚拟文件系统
另一个类似问题:
Windows 复合文件是否有开源替代方案?

编辑:
添加了就地编辑的条件。

编辑:
whefs 被: whio_epfs取代

0 投票
2 回答
302 浏览

python - 如何将文件的一部分视为文件本身?

我将数据存储在文件集合或单个复合文件中。复合文件是通过连接所有单独的文件形成的,然后在所有内容之前加上一个标题,该标题给出了组成部分的偏移量和大小。我想要一个类似文件的对象,它呈现复合文件的视图,其中视图仅代表一个成员文件。(这样,我可以拥有读取数据的函数,这些函数可以接受真实的文件对象或“视图”对象,而且他们不必担心任何特定数据集的存储方式。)哪个库会为我做这件事?

这个mmap类看起来很有希望,因为它是由一个文件、一个长度和一个偏移量构成的,这正是我所拥有的,但是偏移量需要与底层文件系统的分配粒度保持一致,而我正在读取的文件不满足那个要求。该类的名称符合MultiFile要求,但它是为电子邮件中的附件量身定制的,而且我的文件没有这种结构。

我最感兴趣的文件操作是read,seektell. 我正在阅读的文件是二进制文件,因此面向文本的函数readline并不next那么重要。我可能最终也需要write,但我现在愿意放弃该功能,因为我不确定附加应该如何表现。

0 投票
0 回答
878 浏览

excel - 使用 OpenMCDF 修改 xls 文件会导致输出损坏

我正在做一个需要编辑现有办公文件内容的项目。我正在使用开源库 OpenMCDF ( https://sourceforge.net/p/openmcdf ),它可以轻松访问复合 ole 文件中的数据。我发现它非常适合读取数据,但在写入数据时遇到问题。

我编写了一个小代码示例来演示以下问题(请注意,您需要更改文件路径)。在这种情况下,我采用一个特定的流 (./_VBA_PROJECT/VBA/dir) 并重写流的内容,将流截断 50 个字节。为了演示损坏,如果您使用 7zip 打开输出文件并尝试导出 dir 流,您会被告知 dir 流已损坏。

当您编写比原始流短的流时,问题似乎只是一个问题。添加更多字节似乎不会导致问题。

在这里的任何帮助将不胜感激。

0 投票
1 回答
238 浏览

c# - 调用 IStorage 的 EnumElements 时访问冲突

我正在阅读结构化存储文件。并试图获取根结构的所有子元素。但是这样做时我遇到了访问冲突异常。

这是本机方法,

这是我的调用代码。

请注意,如果我调用另一个方法,如果 IStorage,如 OpenStream,工作正常,

我在打开文件时尝试了不同的 STM 标志组合,但它不起作用。

0 投票
1 回答
269 浏览

com - Ole 附件 IStorage 格式规范

我试图在事物的复合文件级别了解 Outlook Ole 附件的格式和规范,手头的 Ole 附件是图片(设备独立位图),我通过将 RTF 文本电子邮件与内联图片组成来生成 Msg 文件正文。使用结构化存储资源管理器(Microsoft 的工具)打开 msg 文件,我可以看到附件子存储: 子存储 ole 附件

我了解 Ole 附件对象的结构,但我在任何地方都找不到子存储中 MailStream 流的格式。我在问是否有人知道格式或可以向我指出在这种情况下有帮助的文档。我专门询问 MailStream,请不要回答指出复合文件规范是如何或类似的。提前致谢。

0 投票
1 回答
107 浏览

c++ - LPSTREAM 无法读入 CString

我正在尝试使用 LPSTREAM 将文本读入 CString,但它似乎无法正常工作,这是我正在调用的代码:

当它读入字符串时,Visual Studio 会说 CString 中的数据已损坏。

复合存储的流内容如下:

我不完全确定我是否正确使用了 Read(),我该如何解决这个问题?

0 投票
0 回答
101 浏览

c++ - 如何使用 StgOpenStorageEx() 函数提取 .docx、.xlsx、.pptx 的文档属性?

我正在使用StgOpenStorageEx () 来获取标题、主题、标签、作者等文档属性。

我成功地获得了 .doc、.xls、.ppt 文件的所有这些属性。但是.docx、.xlsx、.pptx没有得到任何东西

StgOpenStorageEx() 已成功打开 .docx 文件,但未获取任何属性。为什么?

我有什么遗漏吗?

代码: