[C] leggere e sovrascrivere file c
Ciao a tutti.
Ho un file di testo con dei numeri. Io voglio leggere quei numeri, memorizzarli e raddoppiarli.
Poi li voglio riscrivere raddoppiati sempre sullo stesso file, chiaramente cancellando quelli di prima.
Ho provato ad aprirlo sia con "r+" che con "w+" e fare: lettura-rewind-scrittura.
Il problema è che se il file in precedenza aveva più caratteri, quelli in eccesso mi rimangono scritti.
Come devo fare? grazie
Ho un file di testo con dei numeri. Io voglio leggere quei numeri, memorizzarli e raddoppiarli.
Poi li voglio riscrivere raddoppiati sempre sullo stesso file, chiaramente cancellando quelli di prima.
Ho provato ad aprirlo sia con "r+" che con "w+" e fare: lettura-rewind-scrittura.
Il problema è che se il file in precedenza aveva più caratteri, quelli in eccesso mi rimangono scritti.
Come devo fare? grazie
Risposte
Normalmente si preferisce seguire la seguente strada:
[*:35mb77vs]Leggere il file di input[/*:m:35mb77vs]
[*:35mb77vs]Scrivere in un file temporaneo[/*:m:35mb77vs]
[*:35mb77vs]Cancellare il file originale[/*:m:35mb77vs]
[*:35mb77vs]Rinominare il file temporaneo come il file iniziale[/*:m:35mb77vs][/list:u:35mb77vs]
La principale ragione per fare qualcosa del genere è che se succede qualcosa durante la scrittura del file temporaneo il file di input rimane inalterato e ancora utilizzabile. Se scrivi invece sullo stesso file, il file rimarrebbe corrotto.
Ma se proprio vuoi farlo sullo stesso file il metodo più semplice è il seguente:
[*:35mb77vs]Aprire il file in lettura[/*:m:35mb77vs]
[*:35mb77vs]Leggere i valori dal file[/*:m:35mb77vs]
[*:35mb77vs]Chiudere il file in lettura[/*:m:35mb77vs]
[*:35mb77vs]Aprire il file in sola scrittura in modo da cancellarne il contenuto[/*:m:35mb77vs]
[*:35mb77vs]Scrivere sul file[/*:m:35mb77vs]
[*:35mb77vs]Chiudere il file in scrittura[/*:m:35mb77vs][/list:u:35mb77vs]
Ma io ti consiglio l'altro metodo. Se non hai mai creato un file temporaneo esiste una funzione del C chiamata tmpnam che crea un nome univoco per un file temporaneo (c'è anche tmpfile che apre anche il file ma che io sappia non è possibile ottenerne il nome). In alternativa puoi anche sceglierti un tuo nome per il file temporaneo. Esistono poi le funzioni rename e remove per rinominare ed eliminare i file.
grazie. appena posso vedro' di approfondire quello che mi consigli