fstream.read индикатор прогресса
Я попытался создать индикатор прогресса для чтения файла в C++. Проблемы, с которыми я сталкиваюсь, заключаются в том, что
tellg()
а такжеtellp()
оба возвращают либо 24, либо -1 при чтении, даже если размер файла составляет около 400 МБ. EDIT: из потока, который читает файл, TellG () возвращает правильные значения.- Я не читаю файл с помощью цикла, но с одним
read
-instruction
Код (упрощенно):
fstream file;
void readFile(string filename)
{
file.open(filename, ios::in | ios::binary);
file.read((char*) &buffer, buffersize);
}
void readFileWithProgressIndicator(string filename)
{
size_t filesize = getFileSize(filename)
thread file_read(readFile, filename);
for( ; ; )
{
cout << file.tellg() << ":" << file.tellp() << endl;
}
file_read.join();
}
1 ответ
Поведение 1-программы кажется последовательным. Похоже, вы только что прочитали свой файл за 1 звонок, и я полагаю, ваш размер буфера равен 24. Можете ли вы проверить?
2-Предложение
std::atomic<std::streampos> fg;
std::atomic<std::streampos> fp;
void readFile(string filename)
{
fstream file;
file.open(filename, ios::in | ios::binary);
file.read((char*) &buffer, buffersize);
fg=file.tellg();
fp=file.tellp();
}
void readFileWithProgressIndicator(string filename)
{
size_t filesize = getFileSize(filename)
thread file_read(readFile, filename);
for( ; ; )
{
cout << fg << ":" << fp << endl;
}
file_read.join();
}