Domanda

Sto apertura di un file e ottenere un QTextStream di esso. Sto poi leggendo la linea di flusso per riga usando readLine (). Quando la linea corrisponde a una certa stringa, ho bisogno di sostituirlo con un'altra stringa. Ho bisogno il comportamento di essere che la linea è completamente sostituita (cioè, se la linea era "longword" e mi sostituirla con "parola", la linea dovrebbe contenere "parola" e "parola" soltanto).

Al momento sto usando seek () e quindi l'operatore << per mettere la mia stringa in presso la posizione indicata, ma i resti l'ultima stringa rimango, così mi sono lasciato con qualcosa come "wordword". Come posso evitare che ciò accada e garantire l'intera riga precedente è completamente sostituito con il mio nuovo?

È stato utile?

Soluzione

Per quanto ne so, non è possibile rimuovere semplicemente un pezzo di un file di testo sul posto. Se la stringa di sostituzione era identico per dimensioni, potrebbe essere in grado di sostituire quei byte esatti, e se fosse più breve potrebbe essere in grado di incidere il problema riempiendo lo spazio vuoto con valori nulli.

Se non si vuole fare questo, si dovrà creare un nuovo file, leggere ogni riga dal vecchio file, apportare le modifiche necessarie a quella linea in memoria, quindi scrivere quella linea fuori per il nuovo file. Una volta che questo è completo, si potrebbe quindi sostituire il file originale con il nuovo file.

Se fosse possibile aggiungere / rimuovere pezzi da / per il file, si sarebbe molto probabilmente essere lasciato con un file molto frammentato sul disco rigido. Se avete bisogno di inserire più personaggi, frammenti aggiuntivi dovrebbero essere creati come i nuovi dati semplicemente non potevano entrare nella quantità di spazio occupato dai dati vecchi, e la rimozione di dati dovrebbero lasciare buchi nel file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top