PDA

View Full Version : [C++] Scrittura carattere newline su txt in win


k_mishima
03-01-2009, 18:46
Salve a tutti, ho un problema a cui non riesco a porre rimedio, spero in un vostro colpo di genio

Sotto windows un carattere di fine riga è visto come un Return carrage + Newline, in ascii 13 e 10.

Il problema è la scrittura su un file txt, se io sto scrivendo testo, no problem, ma se sto scrivendo byte letti in modalita' binaria, cosi' come sono, c'è appunto uno sfasamento.

Esempio, devo scrivere il byte corrispondente al 10, 00001010 e lui mi scrive prima il byte 13 e poi il 10
00001101 00001010

Questo mi crea un grosso problema. Il brutto è che la fine riga in win è RC + NL, se fosse stato al contrario, avrei potuto risolvere spostando di 1 dietro il puntatore e sovrascrivendo.


filewrite2 << char(10);
filewrite2.seekp(-1,ios::end);


Purtroppo non si puo' cancellare da 1 file txt, si puo' solo sovrascrivere. Avete qualche conisiglio? Magari usare qualcosa diverso da << ?

cionci
03-01-2009, 19:01
Se apri il file in modalità testuale ? Basta non specificare ios::binary nell'apertura del file. Dai direttamente in output std::endl, dovrebbe funzionare.

k_mishima
03-01-2009, 19:33
Se apri il file in modalità testuale ? Basta non specificare ios::binary nell'apertura del file. Dai direttamente in output std::endl, dovrebbe funzionare.

Devo aprirlo in binario, perchè sto provando a comprimere vari file, ad esempio immagini jpg (lo so non serve a nulla, ma lo scopo è comprimere e riottenere il file di partenza di vari formati), se apro in modalità normale non mi legge un sacco di caratteri, non mi conta tutti i byte.

Ti farei vedere il codice in privato se hai tempo/voglia, è molto commentato.
Oppure boh, altre idee?


Edit: risolto, questo forum porta fortuna, ogni volta che ci posto dopo riesco a trovare l'errore xD

non avevo aperto il file da scrivere in binario, ho inserito

filewrite2.open("estratto.jpg", ios::out | ios::binary);

e ora non da problemi strani

evviva :D

cionci
03-01-2009, 21:36
Via...allora ci ero andato vicino :D