阅读了有关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/

10-08 23:54