none
MSVC 下的 fmemopen RRS feed

  • 问题

  • linux中有这个函数fmemopen,    FILE* fmemopen (void *buf, size_t size, const char *opentype)
    就是将内存中某一段取出来,用FILE 指针返回,请问在MSVC中有这样的函数么?

    注:我要的不是内存文件映射,而将内存中的某一段用FILE来操作.


    emyueguang

    2012年2月16日 4:15

答案

  • 如果只是单纯的由CFile得到FILE*,是可以做到的
    CFile file(_T("F:\\11.txt"), CFile::modeRead);

    FILE* f = _tfdopen (_open_osfhandle(fin.m_hFile, NULL), _T("rb"));
    而CMemFile类是CFile类的派生类


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已建议为答案 Helen Zhao 2012年2月20日 3:28
    • 已标记为答案 Helen Zhao 2012年2月20日 3:28
    2012年2月17日 2:07
    版主
  • 你上面做法的前提是,磁盘上面有一个这个文件,然后用CFile来打开这个文件,读数据到内存中,此时这个文件句柄是可以转换成FILE*的,因为它有磁盘文件的句柄,我的需求是,一片内存区域,用FILE*来操作,没有磁盘文件作为依托.

    不过,你倒提醒了我,可以将这段内存写入系统的临时文件,然后就可以通过FILE*来操作这个临时文件,完了之后把这个临时文件删除就可以了.

    谢谢指点!

    emyueguang

    • 已建议为答案 Helen Zhao 2012年2月20日 3:28
    • 已标记为答案 Helen Zhao 2012年2月20日 3:28
    2012年2月17日 8:45

全部回复

  • MemoryStream

    我也有自己的签名档哦!

    2012年2月16日 4:42
  • C++,不是.NET Framework, 也不是托管的C++

    emyueguang

    2012年2月16日 5:32
  • CMemFile ??

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年2月16日 8:06
    版主
  • CMemFile的文件句柄不可以转换成FILE*,所以这个不行,如果可以找到一个将CMemFile的句柄转换成FILE*的,也就OK了.

    emyueguang

    2012年2月17日 0:37
  • 好像真的没有类似的操作

    你的具体需求是什么

    或许有其他的实现方式


    新浪微博http://weibo.com/xianglitian,欢迎围观

    2012年2月17日 0:49
  • 如果只是单纯的由CFile得到FILE*,是可以做到的
    CFile file(_T("F:\\11.txt"), CFile::modeRead);

    FILE* f = _tfdopen (_open_osfhandle(fin.m_hFile, NULL), _T("rb"));
    而CMemFile类是CFile类的派生类


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已建议为答案 Helen Zhao 2012年2月20日 3:28
    • 已标记为答案 Helen Zhao 2012年2月20日 3:28
    2012年2月17日 2:07
    版主
  • CMemFile的文件句柄不可以转换成FILE*,所以这个不行,如果可以找到一个将CMemFile的句柄转换成FILE*的,也就OK了.

    emyueguang


    Please refer: http://www.codeproject.com/Articles/1044/A-Handy-Guide-To-Handling-Handles

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年2月17日 2:09
    版主
  • 你上面做法的前提是,磁盘上面有一个这个文件,然后用CFile来打开这个文件,读数据到内存中,此时这个文件句柄是可以转换成FILE*的,因为它有磁盘文件的句柄,我的需求是,一片内存区域,用FILE*来操作,没有磁盘文件作为依托.

    不过,你倒提醒了我,可以将这段内存写入系统的临时文件,然后就可以通过FILE*来操作这个临时文件,完了之后把这个临时文件删除就可以了.

    谢谢指点!

    emyueguang

    • 已建议为答案 Helen Zhao 2012年2月20日 3:28
    • 已标记为答案 Helen Zhao 2012年2月20日 3:28
    2012年2月17日 8:45
  • CMemFile的句柄m_hFile貌似一直为0xFFFFFFFF,该如何用FILE* f =_tfdopen (_open_osfhandle(fin.m_hFile, NULL), _T("rb"))?每次转都报错!
    2012年10月5日 8:59