После прочтения большого отчета о stackoverflow я решил пойти с файлом * (поверх std :: fstream), чтобы быстро манипулировать моими двоичными файлами. Кроме того, мне нужно было усечь мой файл во время процесса (_chsize или ftruncate), который будет работать только с файловым дескриптором (вызов fileno).Размер off_t во время компиляции
Так что я пытаюсь что-то вроде этого работы (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 * обеспечивают лучшую производительность:
Сделать typedef? –
Что не так с использованием 'off_t' в себе? Он должен быть подходящим для любого 'FILE *', который вы используете. –
** Почему ** вы идете с 'FILE *'? Нет ничего плохого в 'std :: ofstream'. Производительность не является проблемой - это точно так же быстро, как 'FILE *'. –