QFILE/QDATASTREAM Escrevendo sobre dados existentes
Pergunta
Eu tenho um arquivo que é digamos 8 bytes de comprimento. Por exemplo, parece assim:
22222222
Agora, eu li primeiro, digamos 5 bytes e mudando -os. Para ex. para 11111
Por fim, quero escrevê -los em dados excistentes no arquivo, então espero que o arquivo fique assim:
11111222
Mas eu entendo apenas 11111
, porque o arquivo é apagado. Como posso desativar apagar? (Talvez essa pergunta exista, mas não pode encontrar perguntas como esta)
Solução
Dependendo do que você está fazendo exatamente com o arquivo, você pode querer mapear a memória:
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();
Outras dicas
void fileopen()
{
QDataStream Input(&file);
Input>>"11111";
Input>>"22222";
file.close();
}
Esta função escreve os dados.
QDataStream &operator<<(QDataStream &ds,const QString &data)
{
ds<<data.toLatin1().data();
ds<<data.toLatin1().data();
return ds;
}
Tente abrir o QFile
com | QIODevice::Append
, então QFile::seek()
, então crie o QDataStream
no QFile
objeto. Mas observe isso QDataStream
Adiciona informações de controle à saída, para que provavelmente não resultem exatamente no que você deseja.
Além disso, se você quiser escrever texto, não dados binários, tente com QTextStream
.