在阅读了大量关于 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* 提供了更好的性能: