[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] Programmino in C



All'incirca Tue, 24 Jul 2007 10:35:39 +0200,  Paolo Sala
<piviul@riminilug.it> 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 <g.mascellani@gmail.com>
Pisa, Italy

Web: http://giomasce.altervista.org
SIP: g.mascellani@ekiga.net
GPG: 0x5F1FBF70 (FP: 1EB6 3D43 E201 4DDF 67BD  003F FCB0 BB5C 5F1F BF70)

Attachment: signature.asc
Description: PGP signature


Reply to: