[C] leggere e sovrascrivere file c

kobeilprofeta
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

Risposte
apatriarca
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.

kobeilprofeta
grazie. appena posso vedro' di approfondire quello che mi consigli

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.