Qfile / QDataStream scrittura su dati esistenti
Domanda
Io ho un file che è diciamo 8 byte di lunghezza. Per esempio sembra che:
22222222
Ora, leggo primi diciamo 5 byte e cambiarle. Per es. a 11111
Infine, voglio scrivere loro SU excisting dati al file, quindi mi aspetto il file per sembrare che:
11111222
Ma ho solo 11111
, perché il file viene cancellato. Come posso disabilitare la cancellazione? (Forse esiste questa domanda, ma domanda couldn scoperta come questo)
Soluzione
A seconda di ciò che si sta facendo esattamente con il file, si potrebbe desiderare di memoria mappare:
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();
Altri suggerimenti
void fileopen()
{
QDataStream Input(&file);
Input>>"11111";
Input>>"22222";
file.close();
}
Questa funzione di scrittura dei dati.
QDataStream &operator<<(QDataStream &ds,const QString &data)
{
ds<<data.toLatin1().data();
ds<<data.toLatin1().data();
return ds;
}
Provare ad aprire il QFile
con | QIODevice::Append
, QFile::seek()
poi, quindi creare il QDataStream
sull'oggetto QFile
. Ma nota che QDataStream
aggiunge informazioni di controllo per l'uscita, in modo che, probabilmente, non si traduca in esattamente quello che vuole.
Inoltre, se si desidera il testo di scrittura, i dati non binari, provare con QTextStream
.