Необходимо организовать перемещение содержимого файла блоками. Например скопировать первые 20 байт в другой файл, а в исходном их удалить.
Пробовал так:
if(result == QDialog::Accepted)
{
QFile source("/home/vivo/test");
source.open(QIODevice::ReadWrite);
QFile destination("/home/vivo/testcopy");
if (!destination.exists())
{
creat("/home/vivo/testcopy", 0777);
}
destination.open(QIODevice::WriteOnly | QIODevice::Append);
if (destination.isOpen() && source.isOpen())
{
bool OK;
int block = QInputDialog::getInt(nullptr, "Размер блока", "Укажите размер блока: ", QLineEdit::Normal, 0, 100, 2, &OK);
if(OK)
{
QByteArray empty(block, 0x0);
QByteArray buffer;
buffer = source.read(block);
destination.write(buffer);
source.seek(0);
source.write(empty);
}
else
{
QByteArray buffer;
QByteArray empty(source.size(), 0x0);
buffer = source.readAll();
destination.write(buffer);
source.write(empty);
}
destination.close();
source.close();
}
else
{
QMessageBox::warning(this,"Ошибка", "Не удалось открыть Ошибка", "Не удалось открыть файл");
}
}
Это работает, но только 1 раз. При повторном перемещении MessageBox не выскакивает, файлы открываются, но данные не перемещаются. В чем моя ошибка?
Вы не удаляете первые 20 байт из исходного файла, а перезаписываете их нулями. Соответственно во второй раз у вас копируются нули, которые потом оказываются во втором файле. Вам следует перечитать всё содержимое исходного файла начиная с 20-й позиции и перезаписать начало файла.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Класс QSerialPort, насколько я понимаю, не предназначен для работы с QThreadПоэтому делаю класс наследник который сможет работать с QThread, в котором...
Метод map перезаписывает элемент а не добавляет новый, пробовал и методом emplace и pair, в чем ошибка подскажите?
Помогите разобраться нубу с тем, как работает istream&, конкретно интересует следующая конструкция:
Есть текстовый файл в котором хранится ссылка к примеру (https://rustackoverflow