CFile转FILE*

我们每个人编写程序时,都会或多或少的被一些小问题所困扰。这些问题有时就像是谜语,答案也许很简单,但解决的过程却像猜谜一样花时间。我的笨办法是日积月累,下面我介绍CFile如何转FILE*,从问题场景,方法和具体代码等方面写起,希望对大家能有所帮助。

       比如原先有一个程序,其中的文件操作都是用CFile完成的,假定就操作一个文件a.dat,初始化时就用CFile::Open打开了文件,然后各种功能中直接使用这个CFile对象,最后在程序退出时调用CFile::Close关闭文件。现在要增加一个新功能,这个功能封装在DLL中,提供的接口要求参数为C Runtime LibraryFILE*,这个DLL不能修改。

       因为初始化时已经用CFile打开了文件,现在用fopen打不开了。因为其他功能都要用CFile,而这个新增功能用FILE*,最好的办法就是将已有的CFile转换成FILE*。(另外的方法是对原先程序进行大改,每个具体功能的实现中自己打开文件,功能结束后关闭文件,取消初始化时的CFile打开文件,这样太繁琐了,并且说不定就把已有功能改坏了)

       CFileFILE*分为几步,首先从CFile获得WindowsHANDLECFile::m_hFile),接着将WindowsHANDLE转换为CRTHANDLE_open_osfhandle),最后将CRTHANDLE打开,得到FILE*_fdopen,很简单。

       示例代码:

       CFile fin

       fin.Open(“a.dat”,CFile::modeRead);

       FILE* f = _fdopen(_open_osfhandle(fin.m_hFile, NULL), "rb");

 

参考资料:

A Handy Guide To Handling Handleshttp://www.codeproject.com/KB/files/handles.aspx

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值