问题描述
我必须连接两个API,它们使用不同的结构来描述文件。一个给我一个std::FILE*,另一个给我一个属于GFile*的GInputStream*或GIO。是否有一种直接的方法可以从我收到的原始文件指针中创建任何一个对象?
react-query
解决方法
如果您想重新使用基础文件句柄,则需要针对特定平台。
-
在POSIX上:
fileno
与g_unix_input_stream_new
组合 -
在Windows上:
_get_osfhandle
与g_win32_input_stream_new
组合
例如这样的
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
在使用期间一直保持打开状态。