fstream.read индикатор прогресса

Я попытался создать индикатор прогресса для чтения файла в C++. Проблемы, с которыми я сталкиваюсь, заключаются в том, что

  1. tellg() а также tellp() оба возвращают либо 24, либо -1 при чтении, даже если размер файла составляет около 400 МБ. EDIT: из потока, который читает файл, TellG () возвращает правильные значения.
  2. Я не читаю файл с помощью цикла, но с одним 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();
}
Другие вопросы по тегам