Я пытаюсь сделать индикатор выполнения для копирования части диска на другую. Я использую класс индикатора выполнения, который имеет дело с печатью индикатора выполнения, который я обнаружил при замене стека (https://codereview.stackexchange.com/questions/186535/progress-bar-in-c), который я немного изменил, чтобы обеспечить большую точность (показывая десятичное число).
Однако для копирования файлов я использую вектор, и если после объявления моего вектора я помещаю объявление объекта индикатора выполнения, то вместо индикатора выполнения отображается часть содержимого вектора, который отображается.
Вот пример кода, который не работает:
vector<char> buff(512);
progress_bar progress{std::cout, 70u, "Formating"};
int fd=open("/dev/sdc1",O_RDONLY);
int fd2=open("/dev/sdb1",O_RDWR);
double NbOfBlocks = 11800.0;
if (fd>0)
{
for (int i = 0.0; i<NbOfBlocks; i++)
{
progress.write(i/NbOfBlocks);
read(fd,&buff[0],512*i);
write(fd2,&buff[0],512*i);
}
}
Если я это сделаю:
progress_bar progress{std::cout, 70u, "Formating"};
vector<char> buff(512);
int fd=open("/dev/sdc1",O_RDONLY);
int fd2=open("/dev/sdb1",O_RDWR);
double NbOfBlocks = 11800.0;
if (fd>0)
{
for (int i = 0.0; i<NbOfBlocks; i++)
{
progress.write(i/NbOfBlocks);
read(fd,&buff[0],512*i);
write(fd2,&buff[0],512*i);
}
}
Все отлично работает.
Есть идеи, почему или как этого избежать?