Newsgroup: it.comp.lang.c++
Titolo: Apertura file in append

Salve,
è possibile aprire un file in append inserendo pero' il testo all'inizio del 
file piuttosto che accodarlo?
Ciao 

 file piuttosto che accodarlo?
No.
In inglese "append" vuol dire "accoda", quindi la parola stessa dice che 
la scrittura viene accodata; comunque non e' possibile in nessun modo.
Un file e' analogo a un nastro. Secondo te e' possibile registrare 
qualcosa all'inizio del nasto senza sovrascrivere il contenuto (e senza 
tagliare il nastro)?
Lo so che in teoria si potrebbe pensare a un file system su disco che lo 
consenta, ma non ne ho mai sentito parlare, e in ogni caso non e' 
previsto dal C++ standard.
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

 file piuttosto che accodarlo?
sě, in C faresti:
  fseek(SEEK_SET);
in C++ dovrei consultare il manuale. Ovviamente lo puoi fare solo sui 
file ad accesso casuale. E poi il file viene sovrascritto, non puoi 
inserire.
E.

?manu* ha scritto:

Non solo non puoi inserire, ma se il file e' aperto in modalita' append, 
non puoi neanche sovrascriverlo prima della fine.
Il seguente programma scrive un carattere "a" *in fondo* al file, 
nonostante l'uso della fseek.
#include <cstdio>
int main() {
   FILE* f = fopen("temp.dat", "a");
   fseek(f, 0, SEEK_SET);
   char c = 'a';
   fwrite(&c, sizeof c, 1, f);
   fclose(f);


  fseek(SEEK_SET);
A parte che questa scrittura non č corretta (man fseek), infilare i
byte in testa a un file non č possibile.

 file per potere inserire qualcosa in testa
Sarebbe una soluzione poco intelligente. Il file-system è basato su
catene di unità elementari di allocazione: shiftare non ha senso.

 catene di unità elementari di allocazione: shiftare non ha senso.
Beh, solitamente parto dal presupposto che se uno chiede come 
fare una cosa, non stia a me dire SE deve farla o meno, ma al 
limite come farla.
So che a te invece piace molto dare spesso consigli filosofici 
di fondo, su quel che è bene e male.
Nota cmq che una volta tanto non sono neppure di idea contraria 
alla tua : un simile requisito di shiftare interi files come le 
stringhe è comunque fonte di inefficienze notevoli e senza 
sconti, a meno di non lavorare con memory mapped (il che è 
sostanzialmente barare), e se si riesce a girarci intorno 
diversamente è il migliore obiettivo di certo.
ciao
Soviet

 di fondo, su quel che è bene e male.
Come ti permetti di fare queste affermazioni? datti una calmata.
Quello che so io, invece, è che tu hai una scarsa competenza tecnica
su molteplici argomenti, cionondimeno ti ergi a dispensatore di
consigli tecnici. Prima di preoccuparti della "filosofia" degli altri,
assicurati d'avere sufficiente competenza per trattare certe
questioni. Sei solito mischiare gli argomenti in polpettoni
lunghissimi, astrusi e confusi, nei quali si intravedono soluzioni
arzigogolate e inefficienti, quando non impossibili. Se ti sembra che
qualcuno stia proponendo cosa è bene e cosa è male, è perché
probabilmente quel qualcuno sta cercando di riparare alle scemenze che
scrivi.

 scrivi.
In base a quanto dici, mi aspetto quindi che chi ha iniziato il 
thread ti ringrazierà esplicitamente per averlo salvato 
dall'effetto devastante delle mie scemenze.
Se lo farà, me ne scuserò pubblicamente.
ciao
Soviet

 non puoi neanche sovrascriverlo prima della fine.
gia', va aperto con "w+"...
E.

 incollarne parti perché non mi sento obbligato a rileggerli.
Forse dovreste darvi una calmata tutti e due. :)
Credo che tu fossi assolutamente in buona fede quando hai scritto ad
Andrea che da opinioni 'filosofiche'. E credo che Andrea sia scattato
immotivatamente.
Tuttavia credo anche che Andrea faccia *assolutamte* bene a dare queste
opinioni 'filosofiche' (continuo a usare il termine in mancanza di uno
migliore). 
Se ad un utente inesperto gli dai la corda per impiccarsi non gli fai un
favore. Semmai se gli spieghi che appendersi per il collo fuori dal
balcone è estremamente poco saggio c'è anche rischio che poi mi
ringrazi.
E' interessante capire come ficcare roba in testa ad un file? Si, forse
a livello di puro: vediamo come si può fare. Il che richiede una
*estrema* competenza delle strutture di basso livello oltre che del
funzionamento di un sistema operativo multitasking (visto che non è che
possiamo fare i porconi con il filesystem a basso livello e aspettarci
che nessuno ci ficchi le mani senza per dire avendo lockato le cose
opportune). Inoltre offri una soluzione parziale e poco interessante per
il poster originario.
Molto più interessante è capire non come vuole risolvere il problema
(appendendo all'inizio) ma *perchè* lo vuole risolvere in quel modo.
In particolare, perchè non usa una struttura più di alto livello dove
quelli che lui vede come inserimenti in testa sono in effetti
inserimenti in coda? O eventualmente suggerire di usare un db leggero
come sqlite che lo astrae totalmente dal dove. Questi sono consigli
utili: l'OP ha un problema; un consiglio che lo porta verso la soluzione
del suo programma è utile. Uno che si mette a parlare di
pseudo-file-system no. Ma poi hai idea di che cosa sarebbe l'informatica
oggi se tutti si mettessero a scrivere programmi che scavalcano qua e la
il sistema operativo e accedessero direttamente all'hardware? E se
questi programmi sono buggati e mi fottono il filesystem? No, grazie.
Preferisco usare le primitive che mi da Microsoft/Apple/Posix/Whatever
ed essere sicuro che se io rispetto il contratto loro non mi fanno
crollare la baracca in testa.
-- 
blog:  
http://www.akropolix.net/rik0/blogs
 | Uccidete i filosofi,
site:  
http://www.akropolix.net/rik0/
      | tenetevi riso e
forum: 
http://www.akropolix.net/forum/
     | bacchette per voi.

 così, è un approccio sbagliato per principio, etc).
E' indubbio che in programmazione esistano pratiche errate per
principio e bisogna fare tesoro dell'esperienza altrui. Io, quella
poca che ho, la metto a disposizione degli altri.
I consigli "filosofici" in programmazione sono spesso molto più
importanti di quelli che puntano alla soluzione diretta del problema
spicciolo, perché possono tagliare di netto certe soluzioni
arzigogolate, riportando le questioni ai perché fondamentali. C'è fin
troppa gente che tramuta cose semplici in cose difficili, attraverso
cose inutili. Io ho anni d'esperienza (grande o piccola che sia no ha
importanza) alle spalle ed una cosa che mi rimproverano bonariamente
tutti i colleghi è di chiedere sempre: "perché vuoi farlo?", quando mi
chiedono consigli su come risolvere determinati problemi; capisco che
è una domanda snervante, ma nella mia esperienza è tornato spesso
molto più utile rivedere le basi logiche di certe scelte, che non
procedere alla soluzione tecnica più immediata.