【求助】如何从资源中直接读取文件?

Akrit 2009-04-13 12:13:09
把一些数据文件作为资源编译到exe文件中,在程序中用一些函数来读取这些数据文件
因为很多函数貌似只提供了从硬盘上读取文件的参数而不能从buffer中读取(比如CHtmlView中的Navigate2,还有MSXML中的一些函数),所以以前的做法一直是先把数据文件从资源中提取出来,写到Temp目录中再调用函数读取

请问有没有一种简便方法使这些标准函数直接从资源中读取文件而不需要先写到硬盘上?

呵呵,不知道有没有表达清楚,谢谢啦!
...全文
97 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Akrit 2009-04-18
  • 打赏
  • 举报
回复
貌似没法实现
结贴!
Akrit 2009-04-17
  • 打赏
  • 举报
回复
LS指的从流读等应该是一些功能相同的重载函数吧?
如果函数不提供重载就只能从文件读了?
Akrit 2009-04-14
  • 打赏
  • 举报
回复
貌似实现很麻烦呀~~~
自己再顶一下,看有其他简单一些的方法没
baoyz 2009-04-14
  • 打赏
  • 举报
回复
能直接读文件的函数有很多都能读流或内存映射的文件。
如果那些函数能用“流”的话,把资源转换成流就可以了。
ok1234567 2009-04-13
  • 打赏
  • 举报
回复
1\内置一个mini webserver,用http协议输出
或者:2,自己实现SetDoc(...),SetBody(...)等方法

如果下为一个 SetDoc方法,供参考

void CWebBrowser2::SetDoc(LPCTSTR psz)
{
IDispatch* pDisp = GetDocument();
if(pDisp == NULL) return ;
IHTMLDocument2 * phmDoc2;
HRESULT s=pDisp->QueryInterface(IID_IHTMLDocument2,(void **)&phmDoc2);
if(S_OK != s) return ;

SAFEARRAY *psa =::SafeArrayCreateVector(VT_VARIANT, 0, 1);
if (psa == NULL) return;

VARIANT *variant = NULL;
HRESULT hr = ::SafeArrayAccessData(psa,(LPVOID *)&variant);
if (FAILED(hr)) return;
variant->vt = VT_BSTR;
CString str(psz);
variant->bstrVal = str.AllocSysString();
SafeArrayUnaccessData(psa);

phmDoc2->clear();
phmDoc2->write(psa);
phmDoc2->close();

return ;
}
ok1234567 2009-04-13
  • 打赏
  • 举报
回复
不同的协议对于流数据有不同的要求,上帖是专门对于http应用的
处理文件,可以在网上找一个类似 CxFile的类(内存文件管理类),在内存中处理数据流,比如图片、压缩编码之类的
yjgx007 2009-04-13
  • 打赏
  • 举报
回复
用 Windows API 试下:
LoadLibrary >> LoadResource >> FindResource
Akrit 2009-04-13
  • 打赏
  • 举报
回复
谢谢LS,这种方法应该仅限于Navigate函数吧,那如果希望所有文件读取函数都适用该怎么做呢?
xtjqu 2009-04-13
  • 打赏
  • 举报
回复
mark

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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