[英]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.