如何读写复合文档中的某一个流对象?

PagiHi 2002-06-03 05:30:33
比如WORD文档中的流对象¥DocumentSummaryInformation?最好有示例代码。一定给分!
...全文
68 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
WQ 2002-06-12
  • 打赏
  • 举报
回复
一个简单的例子:
HRESULT hr;
IRoot=NULL;
pEnum=NULL;
pStream=NULL;
// 目录
CString FileName="NoteUser.IFO";
try{
// 创建
hr=::StgCreateDocfile(CComBSTR(FileName),
STGM_READWRITE|STGM_SHARE_EXCLUSIVE,
0,&IRoot);
if(FAILED(hr))
{
// 如果是已存在
if(hr==STG_E_FILEALREADYEXISTS)
{
// 打开
hr=::StgOpenStorage(CComBSTR(FileName),NULL,
STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_DIRECT,
NULL,0,&IRoot);
if(FAILED(hr)) _com_raise_error( hr );
}else
{
// 抛出错误
_com_raise_error(hr);
}
}
//
//
}catch(_com_error &e)
{
AfxMessageBox(IDS_OPEN_STORAGE_ERROR);
}
HRESULT hr;
if(IRoot==NULL) return false;
try{
// 枚举
hr=IRoot->EnumElements(0,NULL,0,&pEnum);
if(FAILED(hr)) _com_raise_error( hr );
//
// 循环取项
ULONG m_lnum=0;
/* hr=pEnum->Next(1,&statstg,&m_lnum);
if(FAILED(hr)) _com_raise_error( hr );*/
while(pEnum->Next(1,&statstg,&m_lnum)==NOERROR)
{
// 取流
if(statstg.type==STGTY_STREAM)
{
GetStream(statstg);
}
}
pEnum->Release();
}catch(_com_error &e)
{
return false;
}
return true;
PagiHi 2002-06-12
  • 打赏
  • 举报
回复
是不是先用IStorage接口的OpenStream函数打开流对象,其中pwcsName值就是传ocumentSummaryInformation?
linghuye 2002-06-11
  • 打赏
  • 举报
回复
不知道你问什么!
如果是WORD文档的DocumentSummaryInformation结构,那只有微软知道.
如果问复合文档流的读写,MSDN里说得很多了.

ELEMENT_DATA ElemData;
hr = pContentStream->Read (&ElemData, sizeof(ELEMENT_DATA),&dwRead);
hr = pContentStream->Write(&ElemData, sizeof(ELEMENT_DATA),&dwWrite);

PagiHi 2002-06-04
  • 打赏
  • 举报
回复
难道没有人会吗?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧