Если вы сделаете это следующим образом (но правильно обернуты в отличии от приведенного ниже), вы можете прочитать файл, не беспокоясь о байте 0x1A в файле (например, обрезая чтение файла коротко). Предложенные ранее методы будут подавлять 0x1A (например) в файле.
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstdlib>
using namespace std;
int main() {
FILE* in = fopen("filename.txt", "rb");
if (in == NULL) {
return EXIT_FAILURE;
}
if (fseek(in, 0, SEEK_END) != 0) {
fclose(in);
return EXIT_FAILURE;
}
const long filesize = ftell(in);
if (filesize == -1) {
fclose(in);
return EXIT_FAILURE;
}
vector<unsigned char> buffer(filesize);
if (fseek(in, 0, SEEK_SET) != 0 || fread(&buffer[0], sizeof(buffer[0]), buffer.size(), in) != buffer.size() || ferror(in) != 0) {
fclose(in);
return EXIT_FAILURE;
}
fclose(in);
}
Но, да, это не реализованный 1-лайнер.
Редактировать: 0x1A не был хорошим примером, поскольку ios_base :: binary будет охватывать это. Тем не менее, даже тогда потоки C ++ часто доставляют мне проблемы при чтении файлов png одновременно с помощью .read (). Использование способа C работает лучше. Просто не могу вспомнить хороший пример, чтобы показать почему. Вероятно, именно с .read () бинарный файл в блоках в цикле может быть проблемой с потоками C ++. Итак, не обращайте внимания на этот пост.