Я пытаюсь прочитать файл, и я понял, что он потерпит неудачу, потому что я пытаюсь прочитать слишком много данных, хотя файл намного больше, чем что я пытаюсь прочитать.Чтение Ifstream с определенным размером (не связанным с размером файла)
Файл 120 Мб, а мой ifstream терпит неудачу на 12967 байт (даже если он начинает действовать странно на 12801.
Вот код, иллюстрирующий мою проблему:
#include <fstream>
#include <iostream>
#include <Windows.h>
using std::ifstream;
using std::cout;
#define CORRECT_SIZE 12800
#define CORRECT_BUT_WIERD 12966
#define INCORRECT_SIZE 12967
bool check_error_bits(ifstream* f);
int main()
{
ifstream myFile("myfile.txt");
char c[CORRECT_SIZE];
char c2[CORRECT_BUT_WIERD];
char c3[INCORRECT_SIZE];
/*
* TEST A (works fine)
*/
myFile.seekg(0, std::ios_base::beg);
myFile.read(c, CORRECT_SIZE);
check_error_bits(&myFile);
cout << myFile.tellg() << std::endl; // Here, tellg() returns 12800
/*
* TEST B (works too, but acts wierd)
*/
myFile.seekg(0, std::ios_base::beg);
myFile.read(c2, CORRECT_BUT_WIERD);
check_error_bits(&myFile);
cout << myFile.tellg() << std::endl; // Here, tellg() returns 16896
/*
* TEST C (FAIL)
*/
myFile.seekg(0, std::ios_base::beg);
myFile.read(c3, INCORRECT_SIZE);
check_error_bits(&myFile);
cout << myFile.tellg() << std::endl; // Here, tellg() returns -1
system("pause");
}
bool check_error_bits(ifstream* f)
{
bool stop = false;
if (f->eof())
{
char msg[500];
strerror_s(msg, errno);
cout << "1: " << msg << std::endl;
}
if (f->fail())
{
char msg[500];
strerror_s(msg, errno);
cout << "2: " << msg << std::endl;
stop = true;
}
if (f->bad())
{
char msg[500];
strerror_s(msg, errno);
cout << "3: " << msg << std::endl;
stop = true;
}
return stop;
}
Попытка читать меньше 12800 байт работает отлично. От 128001 до 12966 он работает (хотя я не проверял, верны ли данные), но tellg() возвращает нечувствительность. После 12966, чтение просто не выполняется.
Консольный вывод эта программа:
12800
16896
1: No error
2: No error
-1
Press any key to continue . . .
Любая помощь будет оценена!
Предполагаю, что вы используете VC++ в качестве своего компилятора из. Вы компилируете как 64-битные, так и 32-битные? –
jaggedSpire
32 бит, я не думал, что это будет иметь значение с такими низкими цифрами? – MyUsername112358
Наверное, нет, но он попал под категорию «приятно знать» – jaggedSpire