从std :: FILE *创建GIO GFile或GInputStream *

问题描述

我必须连接两个API,它们使用不同的结构来描述文件一个给我一个std::FILE*,另一个给我一个属于GFile*GInputStream*GIO。是否有一种直接的方法可以从我收到的原始文件指针中创建任何一个对象?

react-query

解决方法

如果您想重新使用基础文件句柄,则需要针对特定​​平台。

例如这样的

void my_method(FILE* file) {
#ifdef _WIN32
    GInputStream* ginput = g_win32_input_stream_new(_get_osfhandle(file),false);
#else
    GInputStream* ginput = g_unix_input_stream_new(fileno(file),false);
#endif

    . . .
    . . .

    g_input_stream_close(ginput,nullptr,nullptr);
}

请记住,file在使用期间一直保持打开状态。