如何在WinApi中使用HANDLE的FILE *?

有没有简单的方法从WinApi HANDLE创建指向管道一端的FILE *? 像我们在unix中做的事: fdopen(fd,);

你可以这样做,但你必须分两步完成。 首先,调用_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你需要打开它两次