Question

J'ouvre un fichier et obtenir un QTextStream de celui-ci. Je suis alors en train de lire la ligne de flux en ligne à l'aide readLine (). Lorsque la ligne correspond à une certaine chaîne, je dois le remplacer par une autre chaîne. J'ai besoin que le comportement est que la ligne est complètement remplacé (par exemple, si la ligne était « longword » et je le remplacer par « mot », la ligne doit contenir « mot » et « mot » uniquement).

En ce moment je suis en utilisant seek () et l'opérateur << pour mettre ma chaîne dans l'endroit donné, mais les restes de la dernière chaîne reste, donc je suis parti avec quelque chose comme « wordword ». Comment puis-je éviter cela et d'assurer l'ensemble de la ligne précédente est entièrement remplacé par le nouveau?

Était-ce utile?

La solution

A ma connaissance, vous ne pouvez pas simplement enlever un morceau d'un fichier texte en place. Si la chaîne de remplacement était de taille identique, vous pourriez être en mesure de remplacer les octets exacts, et si elle était plus courte que vous pourriez être en mesure de pirater contourner le problème en remplissant l'espace vide avec des valeurs nulles.

Si vous ne voulez pas faire cela, vous devez créer un nouveau fichier, lisez chaque ligne de l'ancien fichier, apportez les modifications nécessaires à cette ligne en mémoire, puis d'écrire cette ligne vers le nouveau fichier. Une fois que cela est terminé, vous pouvez ensuite remplacer le fichier original avec le nouveau fichier.

S'il était possible d'ajouter / morceaux de Emmener à l'/ du fichier, vous serait très probablement laissé un fichier considérablement fragmenté sur le disque dur. Si vous avez besoin d'insérer plus de caractères, des fragments supplémentaires devraient être créés que les nouvelles données ne pouvaient tout simplement pas tenir dans l'espace occupé par les anciennes données et la suppression des données laisseront des trous dans le fichier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top