您能否仅使用其复合文件流从 97-2003 恢复 word 文档?
Can you restore a word document from 97-2003 only using its Compound File streams?
我正在尝试恢复使用 97-2003 版本的 word 文档。我不记得我为什么这样做了,但我把 Compound File streams 保存到一个文件夹中,这绝对是我想要作为原始文档返回的东西。有解决办法吗?
谢谢!
当然,理论上你应该能够恢复它。
您应该能够使用
创建根复合文档
StgCreateDocfile() // or StgCreateStorageEx()
如果成功,您将需要来自此的 IStorage*
指针。
如果您的文件夹中有一个文件夹,您将不得不为每个文件夹创建子存储——并以递归方式进行。 API 是 IStorage::CreateStorage()
... 查一下。
如果文件夹中有文件,则需要在相当于文件夹的存储中创建流。要创建流,请使用 IStorage::CreateStream()
...查找参数。
查看您的屏幕截图,它有一些名为 [1]CompObj 或 [5]SummaryDocumentInformation 的流。对于 [n] 部分,这可能等同于 _T('\00n'),其中 n 是 1 或 5 或其他任何值——它可能是一个控制字符。我在复合文件中看到过。如果您想进行调查,请创建一个 Word 97-2003 文档并另存为 .doc 文件并检查结构。
所以,像 [1]CompObj 这样的东西实际上是 _T("\001CompObj")
上面关于文件名中 [n] 的内容是 educated/experienced 猜测。
我正在尝试恢复使用 97-2003 版本的 word 文档。我不记得我为什么这样做了,但我把 Compound File streams 保存到一个文件夹中,这绝对是我想要作为原始文档返回的东西。有解决办法吗?
谢谢!
当然,理论上你应该能够恢复它。
您应该能够使用
创建根复合文档StgCreateDocfile() // or StgCreateStorageEx()
如果成功,您将需要来自此的 IStorage*
指针。
如果您的文件夹中有一个文件夹,您将不得不为每个文件夹创建子存储——并以递归方式进行。 API 是 IStorage::CreateStorage()
... 查一下。
如果文件夹中有文件,则需要在相当于文件夹的存储中创建流。要创建流,请使用 IStorage::CreateStream()
...查找参数。
查看您的屏幕截图,它有一些名为 [1]CompObj 或 [5]SummaryDocumentInformation 的流。对于 [n] 部分,这可能等同于 _T('\00n'),其中 n 是 1 或 5 或其他任何值——它可能是一个控制字符。我在复合文件中看到过。如果您想进行调查,请创建一个 Word 97-2003 文档并另存为 .doc 文件并检查结构。
所以,像 [1]CompObj 这样的东西实际上是 _T("\001CompObj")
上面关于文件名中 [n] 的内容是 educated/experienced 猜测。