0

在阅读了大量关于 stackoverflow 的报告后,我决定使用 FILE*(通过 std::fstream)来快速操作我的二进制文件。此外,我需要在此过程中截断我的文件(_chsize 或 ftruncate),这仅适用于文件描述符(fileno 调用)。

所以我试图让这样的工作(C++):

#define _FILE_OFFSET_BITS 64
#include <stdio.h>
static inline off_t FTello(FILE *stream)
{
#if _WIN32
#if defined(__MINGW32__)
  return ftell( stream ); // 32bits
#else
  return _ftelli64( stream );
#endif
#else
  return ftello( stream );
#endif
}

但是,这显然不适用于 Visual Studio。我在文档中的任何地方都找不到在编译时更改 off_t 大小的方法。

拥有这样的签名会很诱人(我假设我有 C99:stdint.h):

static inline int64_t FTello(FILE *stream)

别人一直在做什么?

作为参考,这是我一直在阅读的内容,这似乎表明 FILE* 提供了更好的性能:

4

1 回答 1

1

如果您已经强制执行大文件支持,只需定义 FTello() 以返回 int64_t。

不过,您可能会发现 inttypes.h 比 stdint.h 更便携。

MS 并不以与 UNIX 兼容而闻名,尽管它们提供了类似命名的函数。如果你要提供一个兼容层,最好看看现有层做了什么(例如 boost.filesystem),到处都有微妙之处。

顺便说一下,boost.filesystem 有 resize_file()。

于 2013-07-25T19:04:19.850 回答