All'incirca Tue, 24 Jul 2007 10:35:39 +0200, Paolo Sala <[EMAIL PROTECTED]> sembrerebbe aver scritto:
> Ciao a tutti, scusate l'OT... dovrei fare un programmino in C che > inserisce/cancella righe in un file di testo (in realtà sarà un > trigger di postgres che sincronizza un file ics ogni qualvolta vengono > modificati/inseriti dati nel database) e sono molto a digiuno di C. > > Come dicevo mi piacerebbe riuscire agevolmente a inserire/cancellare > righe all'interno del file e sono, per quel mi sono documentato, > abbastanza in difficoltà... utilizzando infatti fputs ho visto che > sovrascrive la riga corrente e non la inserisce... e anche per > cancellarla utilizzando soltanto fputs e fread non è così agevole. > Forse conviene utilizzare fread e fwrite? Qualcuno è a conoscenza di > alcune librerie libere o ha qualche consiglio da darmi? Non entro nello specifico del tuo problema, perché non so usare Postgres e tutte le altre cose che dicevi. Scrivere un programmino come dici tu non è facile, perché in ogni caso se aggiungi dei byte a metà di un file senza voler sovrascrivere vuol dire che comunque devi riscrivere tutto il file da quel punto in poi per spostare in avanti i caratteri. E questo, ovviamente, le librerie standard non te lo permettono. Per quanto ne so io, l'unica soluzione che riesco a pensare è quella di, appunto, riscriverti tutto il file. Leggi sequenzialmente l'originale e lo copi in un file temporaneo (o anche nella RAM, se non è esageratamente grosso), tranne per il fatto che quando trovi un punto in cui devi aggiungere qualcosa lo aggiungi tranquillamente. Poi quando hai finito o copi il file temporaneo al posto dell'originale o, se stavi memorizzando in RAM, chiudi il file in lettura e lo riapri in lettura troncandolo e ci scrivi sopra tutto. Ora che ci penso, puoi risparmiare un po' di memoria se l'aggiunta delle nuove righe la fai dopo aver copiato in memoria (quindi in fase di riscrittura) invece che prima. Però sei proprio sicuro che ti serva di fare tutto questo ambaradan? Giovanni. -- Giovanni Mascellani <[EMAIL PROTECTED]> Pisa, Italy Web: http://giomasce.altervista.org SIP: [EMAIL PROTECTED] GPG: 0x5F1FBF70 (FP: 1EB6 3D43 E201 4DDF 67BD 003F FCB0 BB5C 5F1F BF70)
signature.asc
Description: PGP signature