QFile / QDataStream запись на существующие данные - PullRequest
2 голосов
/ 06 августа 2010

У меня есть файл, скажем, длиной 8 байт. Например, это выглядит так:

22222222

Теперь я сначала прочитал, скажем, 5 байтов и изменил их. Например до 11111

И, наконец, я хочу записать их в файл, а затем ожидать, что файл будет выглядеть так:

11111222

Но я получаю только 11111, потому что файл удален. Как я могу отключить стирание? (Возможно, этот вопрос существует, но не смог найти такой, как этот)

Ответы [ 3 ]

7 голосов
/ 06 августа 2010

В зависимости от того, что именно вы делаете с файлом, вы можете отобразить его в памяти:

QFile f("The file");
f.open(QIODevice::ReadWrite);
uchar *buffer = f.map(0, 5);

// The following line will edit (both read from and write to)
// the file without clearing it first:
for (int i=0; i<5; ++i) buffer[i] -= 1;

f.unmap(buffer);
f.close();
2 голосов
/ 06 августа 2010
void fileopen()
{
QDataStream Input(&file);
Input>>"11111";
Input>>"22222";
file.close();
}

эта функция записывает данные.

QDataStream &operator<<(QDataStream &ds,const QString &data)
{

ds<<data.toLatin1().data();
ds<<data.toLatin1().data();
return ds;
}
0 голосов
/ 06 августа 2010

Попробуйте открыть QFile с помощью | QIODevice::Append, затем QFile::seek(), затем создайте QDataStream для объекта QFile. Но обратите внимание, что QDataStream добавляет управляющую информацию в вывод, так что, вероятно, это не приведет к тому, что вы хотите.

Также, если вы хотите написать текст, а не двоичные данные, попробуйте с QTextStream.

...