[英]How make FILE* from HANDLE in WinApi?
有没有简单的方法从WinApi HANDLE创建指向管道一端的FILE *? 像我们在unix中做的事: fdopen(fd,<mode>);
你可以这样做,但你必须分两步完成。 首先,调用_open_osfhandle()
从Win32 HANDLE值获取C运行时文件描述符,然后调用_fdopen()
从文件描述符中获取FILE*
对象。
FILE* getReadBinaryFile(LPCWSTR path) {
HANDLE hFile = CreateFile(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
return nullptr;
}
int nHandle = _open_osfhandle((long)hFile, _O_RDONLY);
if (nHandle == -1) {
::CloseHandle(hFile); //case 1
return nullptr;
}
FILE* fp = _fdopen(nHandle, "rb");
if (!fp) {
::CloseHandle(hFile); //case 2
}
return fp;
}
我的代码获取一个开放的读取二进制文件描述符
如果你不需要,你应该使用fclose关闭FILE *。
我没有测试案例1和案例2,因此使用它需要您自担风险。
你不能交换(转换)他们..如果你需要一个文件与FILE *和HANDLE你需要打开它两次
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.