最近一个项目中发现自己写的主程序使用的是handle处理文件,但后台库中用的是c中的file*, 所以写了个函数做转化:
#include <fcntl.h>
#include <io.h>
FILE* ConvertHandle2FilePt(HANDLE hFile, const char* mode) {
int nHandle = _open_osfhandle((long)hFile, _O_BINARY);
if (nHandle != -1)
return _fdopen(nHandle, mode);
else
return NULL;
}
这里要注意的是:_open_osfhandle的第二个参数需要根据实际要打开的文件类型而定。如果是文本文件,就用_O_TEXT; 如果是二进制文件,就用_O_BINARY。前者会进行文本中cr,lf到lf(line feed)的转化,二者切不可用错!本人就是打开二进制文件时用的是_O_TEXT,然后文件内容也可以正常读取,但读取了若干后便出现乱码了。
更多关于win32和C的句柄转化,推荐这篇文章:
http://www.codeproject.com/Articles/1044/A-Handy-Guide-To-Handling-Handles