问题标签 [structured-storage]

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 投票
4 回答
886 浏览

c++ - VCL 替代 IStorage

作为序言,我使用的是 Borland C++ 和 VCL。

我需要某种结构化存储对象,它可以作为单个文件保存到磁盘,并且可以包含多个命名的二进制数据 blob,我可以通过编程方式枚举、访问和操作这些 blob。

IStorage接口似乎与我想要的很接近,但我更喜欢 VCL 风格的解决方案,因为将 TStream (VCL) 转换为 IStream 会变得很尴尬,而且它们必须是一个更简单的解决方案,使用已经可用的 VCL 东西,比如 TIniFile 但对于二进制数据。

我不想使用 XML,因为二进制数据 blob 非常大,并且当正确编码以在 XML 中使用时,它是完全无效的。

提前感谢所有建议。

0 投票
1 回答
1491 浏览

visual-studio - Visual Studio SUO 文件的文件格式或解析指南。

在哪里可以找到文件格式规范或解析 .suo 文件的指南?我想从中提取断点信息。

MSDN 主题解决方案用户选项 (.Suo) 文件简要描述了存储流是如何从这个结构存储文件中读取和写入的,但是这个信息非常少,尤其是对于我的结构化存储经验的人。

0 投票
1 回答
513 浏览

.net - 如何将更改后的 COM 结构化存储文件写入磁盘?

我实现了一个 COM 结构化存储文件阅读器,它可以打开存储和流式传输对象,这很高兴。但是现在我希望能够将内容从一个存档复制到另一个存档并重命名内容,然后将内容写回磁盘。我什至没有处理复制和重命名操作,因为我似乎甚至无法将更改写入磁盘。我尝试调用 Root IStorage 对象的 Commit 方法,它似乎运行良好,但我没有看到任何变化。我正在通过 C#.NET 中的 PInvoke 实现这一点。以下是适用的代码元素:

做出改变

StructuredStorageNode 类上的名称定义。

0 投票
2 回答
202 浏览

multithreading - 结构化存储

我有一个结构化存储格式的文件。我想知道线程是否可以同时访问这种格式。

意思是让多个线程一次读取不同的流处理它。目标是更快地加载文件。

当我提到一个文件时,我指的是一个代表 CAD 信息的文件。

0 投票
1 回答
701 浏览

c++ - 自定义结构化存储 IPropertySetStorage

我正在尝试将 a 添加IPropertySetStorage到现有IStorage文件中。我计划编写的属性及其值将根据我的设计进行定制(我可能会存储一些整数、一些字符串等)。我不试图符合任何现有的IStorage文件类型。

API 及其文档感觉是针对现有文件格式的。这是惯例,因此(到目前为止)我发现的示例只是令人困惑。

问题)

IPropertySetStorage::Create

  1. (参数 1)FMTID我会通过什么?数据字段上可以全为零吗?我可以弥补吗?
  2. (参数 2)CLSID 可以是nullptr? 如果不是,应该是什么?我需要弄清楚父母IStorage使用了什么值吗?
  3. (参数 3)最好的 propset 标志是什么?我在想,因为我将存储字符串,我应该使用PROPSETFLAG_DEFAULT.
  4. (参数 4)IStorage句柄已打开以供读取(我正在像现有运行时的插件一样运行)。我现在最好的猜测是使用STGM_DIRECT | STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE. 但我一直在STG_E_INVALIDFLAG

请注意,到目前为止,我还无法创建一个新IPropertySetStorageIStorage,但我已经成功创建了一个 custom IStream,并在以后打开时从中读取。

任何与我正在做的事情更相关的教程链接将不胜感激。

编辑请注意,我的代码是从现有应用程序调用的,处理现有文件。当我的代码被调用时,我传递了文件的 root IStorage。这是我所有具有该IStorage基础的代码。

正如我在 #4 中指出的那样,它返回STG_E_INVALIDFLAG.

0 投票
0 回答
219 浏览

ole - OLE 结构化存储等效项

我想将一些带有一些文本和 nuber 文件的大量数据存储到一个文件中。我过去使用过结构化 OLE,我很喜欢它。但现在它似乎是一项相当古老的技术。我也考虑过使用 HDF 文件格式 http://www.hdfgroup.org/HDF5/

但它不支持来自不同机器的单写多读。需要可扩展的存储,即基于文件的存储。

是否有任何其他我可以使用的简单文件格式,与此相同,但快速且易于实现?

沙市

0 投票
0 回答
602 浏览

c# - 读/写stickynotes.snt?

我已经对此主题进行了一些搜索,但找不到今年的任何信息。Microsoft 是否发布了有关如何读取/写入本机 Sticky Notes 的任何 API?我实际上已经能够读取它,但我无法写入它。
为了阅读,我在这里使用了 python 库:OleFileIO_PL ,任何对工作版本感兴趣的人都可以看到这个粘贴:阅读 Stickynotes.py
但是现在我想使用 .Net/C# 来阅读和编写一个新的便签。

我见过这个,但我正在寻找更干净的东西。任何帮助表示赞赏。

另外,有人用过 MiTeC SSViewer 吗?我对使用它犹豫不决,因为它被报告为病毒。SSView

0 投票
1 回答
900 浏览

c++ - StgOpenStorageEx 返回 STG_E_FILEALREADYEXISTS

我试图找出为什么 StgOpenStorageEx 在以只读方式打开复合文档时返回 STG_E_FILEALREADYEXISTS 的原因。这没有意义。该文件在那里,我没有尝试创建任何东西。打开它。我在网上找不到答案,所以我想我会在这里分享我找到的答案。

0 投票
1 回答
147 浏览

c# - 在 C# 中,如何在实现 IStorage 的返回对象上调用 Release?

我正在从 C# 读取和写入结构化存储文件。打开我调用的文件

这有效,我可以访问该文件。我相信我需要在 Storage 对象上调用 Release() 来关闭文件。但是,自从在 IUnknown 上实施以来,我不知道如何到达 Release。

我可以将 StorageInterface 转换为实现 IUnknown 的对象并以这种方式调用它吗?

谢谢,

约翰

0 投票
0 回答
32 浏览

pointers - 结构化存储对象中的指针是指向每个流中的位置还是整个文件中的位置?

我有一个结构化的存储文件,我正在对其进行逆向工程。该对象有多个嵌入其中的流 - 其中一些是压缩的。解压缩流后,我得到了结果数据,我知道事实包含句柄和指向不同对象的指针。我的问题是,如果您假设我知道我正在查看的是一个指针,那么该指针是指向嵌入在结构化存储中的每个流中的一个位置,还是指向整个结构化存储中的一个位置?

我怎么能说出来?是否可以安全地假设由于压缩,指针值必须用于各个流?