Russian Qt Forum

Qt => Общие вопросы => Тема начата: ieroglif от Май 24, 2010, 17:04



Название: QFile::size() возвращает ноль
Отправлено: ieroglif от Май 24, 2010, 17:04
Ничего не понимаю - обычный файл с диска. ничем не занят (никакой другой процесс к файлу не обращается).
Делаю наследника от QFile

соответсвенно:
Код
C++ (Qt)
MyClass::MyClass( const QString & filename, QObject * parent) : QFile(filename,parent)
{
   this->setFileName(filename);
   this->open(QIODevice::ReadOnly);
   qDebug() << this->size(); //возвращает ноль!
}

и есть ещё один вопрос =)
как писать в начало файла сдвигая имеющуюся в нём информацию? prepend, в общем =)
закатывать весь файл в память что бы там запрепендить и закинуть обратно - долго как-то.. могут быть очень больших размеров файлы.


Название: Re: QFile::size() возвращает ноль
Отправлено: kibsoft от Май 24, 2010, 17:27
Ты уверен что файл открылся? Попробуй так:
Код:
qDebug()<<this->open(QIODevice::ReadOnly);

Насчет препенда сложно сказать.. как-то двигать данные все равно придется..


Название: Re: QFile::size() возвращает ноль
Отправлено: ieroglif от Май 24, 2010, 19:33
спасибо, вопрос с нолевым размером решён - моя дурость и программанье в 3 часа ночи - переопределил метод size() и поставил там тестом возврат нуля.

вопрос с препендом остался =)


Название: Re: QFile::size() возвращает ноль
Отправлено: lit-uriy от Май 24, 2010, 20:57
>>вопрос с препендом остался
создать временный файл, писать в него (по сути prepend). По окончании записи, открыть имеющийся и весь записть в конец временного. Оба закрыть, старый удалить а новый переименовать в старое имя


Название: Re: QFile::size() возвращает ноль
Отправлено: Igors от Май 24, 2010, 21:01
и есть ещё один вопрос =)
как писать в начало файла сдвигая имеющуюся в нём информацию? prepend, в общем =)
закатывать весь файл в память что бы там запрепендить и закинуть обратно - долго как-то.. могут быть очень больших размеров файлы.
Никак, можно только крутиться с 2-мя файлами как предложил Юра. Часто также пишут файл chunk'ами,  чтобы данные могли следовать в любом порядке.