簡體   English   中英

如何在WinApi中從HANDLE制作FILE *?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM