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* がより優れたパフォーマンスを提供することを示しているようです。