【问题标题】:Get FILE stream from File Handle [duplicate]从文件句柄获取文件流[重复]
【发布时间】:2021-12-26 22:30:58
【问题描述】:

我想对使用 CreateFile(返回 HANDLE)打开的现有文件使用文件流函数(例如,“ftell”)。我没有高兴地搜索了 SO 和其他地方。我想做这样的事情:

HANDLE h;
FILE *f;
int pos;
h = CreateFile( "MYFILE.TXT", ... )
f = *convert*( h, &f );    // the function I'm looking for  
pos = ftell( f );

有没有办法从文件句柄中获取 FILE 流?

【问题讨论】:

  • _open_osfhandle() 回到 1970 年代,_fdopen() 传送回到 1980 年代
  • ftell 有什么意义?
  • “我想使用文件流函数(例如,“ftell”)” - 为什么有人愿意这样做?为什么要回到 POSIX,即计算的石器时代,文件的硬限制为 2GB?
  • 响应者:我正在维护一个使用 VC6.0 构建的已有 15 年历史的遗留应用程序,在其中我找不到现代的、政治上正确的解决方案。无论如何,恕我直言,我的问题是“如何”这样做,而不是“为什么”我不应该这样做。顺便说一句 - “如何”实际上在引用的答案中得到了回答。
  • SetFilePointer 始终可用,无论您声称自己的代码有多旧,或者您是否需要 Visual C++ 6 来编译它。

标签: winapi


【解决方案1】:

使用_open_osfhandle()从Win32 HANDLE创建一个C风格的文件描述符,然后使用_fdopen()从文件描述符创建一个FILE*

【讨论】:

  • 完美运行!
猜你喜欢
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多