Giovanni Mascellani scrisse in data 24/07/2007 11:12: > Non entro nello specifico del tuo problema, perché non so usare > Postgres e tutte le altre cose che dicevi. > Grazie, ti apprezzo molto anche per questo.
> 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. > Lo temevo... ma mi piacerebbe scriverlo, anche soltanto per rispolverare quelle conoscenze di C che si sono perse negli anni... > 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. > Forse non è poi così complicato... ho notato che la posizione che mi ritorna ftell corrisponde esattamente ai caratteri letti nel file... per la cancellazione potrei con fgets posizionarmi sulla riga da cancellare, memorizzarmi con fread in un buffer il rimanente del file per poi andarlo ad inserirlo con fwrite alla riga in cui mi sono posizionato; analogamente per l'inserimento. Ma quello che mi chiedevo è: è un caso che la posizione che ritorna ftell corrisponda proprio al numero di caratteri dall'inizio del file in cui si è posizionati? Qualcuno ne sa qualcosa? Grazie mille Piviul -- Per REVOCARE l'iscrizione alla lista, inviare un email a [EMAIL PROTECTED] con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a [EMAIL PROTECTED] To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

