• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 微软的IStorage接口

微软的IStorage接口

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了istorage,istorage server,istorage官网,istorage diskashur,x istorage等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 微软的IStorage接口
描述:

那位兄弟用过微软的IStorage接口,并用该接口读取过compound file format,能否给小弟一些指导,最好能够提供源码,先谢过了。


解决方案1:

StgOpenStorage 打开文件 返回IStorage接口
然后IStorage就像目录,IStream就像文件,和操作目录一样操作

解决方案2:

void CCompDocDlg::OnWriteCompDoc() 
{
// TODO: Add your control notification handler code here
UpdateData(true);
m_nLevel = 0;
LPSTORAGE pStgRoot = NULL;
m_szCompFile = "d:\\comp.dem";
m_szDir = "d:\\code\\";
// CLSID clsid;
// ::CLSIDFromProgID(OLESTR("ATLTest.TextObject"), &clsid);
OLECHAR dir[MAX_PATH * 2];
mbstowcs(dir, m_szCompFile, m_szCompFile.GetLength()+1);
if (FAILED(::StgCreateDocfile(dir, 
   STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE,
   0,
   &pStgRoot)))
{
MessageBox("create docfile failed!");
return;
}
ReadDirectory(m_szDir, pStgRoot);
pStgRoot->Release();
MessageBox("create docfile complete!");
return;
// HMODULE hDllModule = ::LoadLibrary(_T("C:\\Program Files\\Microsoft Visual Studio\\MyProjects"
// "\\persist01\\Debug\\persist01.dll"));
//
// int (_stdcall *pRegSvr)() = ::GetProcAddress(hDllModule, _T("DllRegisterServer"));
// HRESULT hr = pRegSvr();
}
VOID CCompDocDlg::ReadDirectory(const char* szDir, IStorage *pStgRoot)
{
m_nLevel++;
char szNewPath[MAX_PATH];
strcpy(szNewPath, szDir);
strcat(szNewPath, "*.*");
WIN32_FIND_DATA FindData;
HANDLE h = ::FindFirstFile(szNewPath, &FindData);
if (h == INVALID_HANDLE_VALUE) 
{
return;
}
char *ptest = FindData.cFileName;
OLECHAR wcsStorageName[MAX_PATH * 2]; // subStorageName
OLECHAR wcsStreamName[MAX_PATH * 2]; // stream name
char szData[512]; // file content
do 
{
// unknown!!!
if (!strcmp(FindData.cFileName, "..")
|| !strcmp(FindData.cFileName, ".")) 
{
continue;
}
// unknown!!!
char *pch = NULL;
while ((pch = strchr(FindData.cFileName, '!')) != NULL) 
{
MessageBox(FindData.cFileName);
*pch = '|';
}
if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
{
strcpy(szNewPath, szDir);
strcat(szNewPath, FindData.cFileName);
strcat(szNewPath, "\\");
mbstowcs(wcsStorageName, FindData.cFileName, 32);
wcsStorageName[32] = L'\0';
// why?
TRACE("%d -- sStorage = %s\n", (m_nLevel - 1) * 4, wcsStorageName);
IStorage *pSubStg = NULL;
pStgRoot->CreateStorage(wcsStorageName, 
STGM_CREATE | STGM_READWRITE | STGM_SHARE_EXCLUSIVE,
0,
0,
&pSubStg
);
if (pSubStg == NULL) 
{
return;
}
ReadDirectory(szNewPath, pSubStg);
pSubStg->Release();
}
else
{
if ((pch = strrchr(FindData.cFileName, '.')) != NULL) 
{
if (!stricmp(pch, ".txt")
|| !stricmp(pch, ".c")
|| !stricmp(pch, ".h")
|| !stricmp(pch, ".cpp")
)
{
mbstowcs(wcsStreamName, FindData.cFileName, 32);
wcsStreamName[32] = L'\0';
strcpy(szNewPath, szDir);
strcat(szNewPath, FindData.cFileName);
CStdioFile file(szNewPath, CFile::modeRead);
if (file.ReadString(szData, 511)) 
{
IStream *pStream = NULL;
pStgRoot->CreateStream(wcsStreamName,
STGM_CREATE | STGM_READWRITE | STGM_SHARE_EXCLUSIVE,
0,
0,
&pStream
);
if (pStream == NULL) 
{
return;
}
pStream->Write(szData, 511, NULL);
pStream->Release();
}
}
}
}
} while(::FindNextFile(h, &FindData));
m_nLevel--;
return;
}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 求助:如何使用ISTORAGE接口把文件拷贝到光盘中啊?
  • IStorage读取文件时占用内存的问题
  • 在对IStorage读文件的过程中,为什么要调用CoTaskMemFree去释放每一个节点呢?
  • IStorage->OpenStorage总是返回拒绝访问的问题
  • 既然IPropertySetStorage也是读写一个复合文档,为什么不使用IStorage
  • 向已存在的IStorage添加IStream覆盖之前内容?结构化存储,复合文件
  • IPersistStorage保存到IStorage的问题
  • 已知条件:IStorage,求:其内的IStream
  • 有没有现成的IStorage的实现??
  • 急急的请教高手一个关于IStorage的问题!

相关文章

  • 2017-06-04 能用MSChar控件根据文本文档里的数据作图吗?
  • 2017-06-05 请问WaitForSingleObject如何等待Thread?
  • 2017-06-05 如何用EnumChildWindows和EnumChildProc?
  • 2017-06-05 请问如何用程序启动一个nt服务
  • 2017-06-04 关于“异步可插协议”AboutAsynchronousPluggableProtocolsAPPs
  • 2017-06-05 有没有人有brew开发中sampleposdet官方例子的详细讲解的。注释也可以。
  • 2017-06-05 郁闷的编译问题,请高手指教!
  • 2017-06-04 求类似3721插件的源代码?必有重谢!!!
  • 2017-06-04 C++getvalue值错误
  • 2017-06-05 调用API:SHBrowseForFolder选择文件夹总是报错,为什么?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 如何在VC中响应用vb写的组件里面的事件
    • 操作word表格自定义样式问题
    • COMConnectPoints问题???
    • 想交些朋友,学学vc
    • 紧急求援:怎么讲一个字符串传到ATLCOM的对话框的编辑框中??
    • 用WaitForSingleObject判断进程退出是什么道理?
    • QueryInterface为什么不能成功呢?
    • ActiveX和COM有什么区别?请各位高手给一些COM和ActiveX学习的网址,感激不尽啊
    • 又一个com+事务处理问题
    • 关于IHtmlFramesCollection2接口的问题,请各位大哥帮忙!!

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有