2010-08-06 10 views
2

J'ai un fichier de 8 octets. Par exemple, il ressemble à ça:Ecriture QFile/QDataStream sur des données existantes

22222222

Maintenant, je lis d'abord disons 5 octets et les changer. Par ex. à 11111

Enfin, je veux les écrire SUR EXCISTING données dans le fichier, donc j'attends le fichier ressembler à ça:

11111222

Mais je ne reçois que 11111, parce que le fichier est effacé. Comment puis-je désactiver l'effacement? (Peut-être que cette question existe, mais ne pourrait pas trouver la question comme celle-ci)

Répondre

7

Selon ce que vous faites exactement avec le fichier, vous pouvez à la carte mémoire, il:

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(); 
+0

Merci! C'est exactement ce dont j'ai besoin. –

2
void fileopen() 
{ 
QDataStream Input(&file); 
Input>>"11111"; 
Input>>"22222"; 
file.close(); 
} 

cette fonction écrire les données.

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

ds<<data.toLatin1().data(); 
ds<<data.toLatin1().data(); 
return ds; 
} 
0

Essayez d'ouvrir la QFile avec | QIODevice::Append, puis QFile::seek(), puis créez le QDataStream sur l'objet QFile. Mais notez que QDataStream ajoute des informations de contrôle à la sortie, ce qui ne donne probablement pas exactement ce que vous voulez.

Si vous souhaitez écrire du texte, pas des données binaires, essayez avec QTextStream.

Questions connexes