阅读了有关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 *提供了更好的性能:
Writing a binary file in C++ very fast
最佳答案
如果您已经在强制执行大文件支持,则只需定义FTello()以返回int64_t。
您可能会发现inttypes.h比stdint.h更可移植。
尽管MS与UNIX兼容,但它们并不具有同名功能。如果要提供兼容性层,请更好地研究现有层的功能(例如boost.filesystem),到处都有细微的差别。
顺便说一句,boost.filesystem具有resize_file()。
关于c++ - 编译时off_t的大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17863594/