C++, Qt, Оцените функцию!

программирование C++ qt Код

Работаю с Qt!

Функция должна будет сдвигать данные в файле от
позиции lastpos и до позиции newpos
Причем newpos допускается что будет вне файла!
Скажите мошь я чета пропустил!
Или мошь както можно упростить код!
Просто это функция - одна из многих данного класса, и проверить смогу
тока когда допишу все! Хотелось бы сразу в точку!

opened будет true если файл открыт
S_MB равно 16777216 (т.е. 16 Мб)
file открыт заранее (QFile)

void XMyFile::movedata(qint64 lastpos, qint64 newpos)
{
// Требования: Файл не пуст, файл открыт, lastpos в пределах
// файла и отрыв между lastpos и newpos не более чем S_MB
if ((file->size() == 0)||(!opened)||
(lastpos >= file->size())||((newpos - lastpos) > S_MB))
return 0;

qint64 readedA = 0, readedB = 0; // скока прочитано в кажд. буф.
if (newpos >= file->size())
readedA = ((newpos + 1) - file->size());
if (readedA > 0) // Если размер файла надо увеличить, делаем это
file->resize((file->size() + readedA));
bool first = true; // первый цикл
readedA = 0;
qint64 thispos = lastpos, postowrite = newpos, sizeminus = 0;
char * bufA = new char[S_MB]; // Буф. 1
char * bufB = new char[S_MB]; // Буф. 2
file->seek(lastpos);
while (true) { // Читаем и пишем поблочно
if (newpos > lastpos) { // Файл будет больше
if ((readedB == S_MB)||(first)) {
readedA = file->readData(bufA, S_MB);
if (!first) {
file->writeData(bufB, readedB);
}
}
else {
file->writeData(bufB, readedB);
break;
}
if (readedA == S_MB) {
readedB = file->readData(bufB, S_MB);
if (!first) {
file->writeData(bufB, readedB);
}
}
else {
file->writeData(bufA, readedA);
break;
}
}
else { // Файл будет меньше
file->seek(thispos);
readedA = file->readData(bufA, S_MB);
thispos += readedA;
file->seek(newpos);
file->writeData(bufA, readedA);
newpos += S_MB;
sizeminus += readedA;
if (readedA != S_MB){
file->resize((file->size() - sizeminus));
}
}
}
}

Примечание:
Неа не лучше!...

Примечание:
Ладно кому удобнее в PasteBin вот ссылка:
http://pastebin.com/wbQDAUVx

Примечание:
Кстати я чуть чуть не правильно выразился в начале!
Функция должна будет сдвигать данные в файле от
позиции lastpos и до конца файла! В позицию newpos!

Примечание:
Tommy Vercetti я не понял вы что ответили?

Блин косяк вышел функция пишет больше байт чем должно быть!
Ответы:
Может лучше воспользоваться...


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.