PDA

View Full Version : [ANSI C89] Manipolazione file


M4rk191
24-01-2010, 12:02
Stò lavorando con dei file e ho due domande:

1-Perché la sequenza di fine file è \377 invece di \0 (Uso OSX);
2-Perché mi posiziono, ad esempio, al quarto carattere dall'inizio del file, e poi chiamo rispettivamente fgetc() e fputc(), tra una chiamata e l'altra lo stream punta la fine del file?

Mi spiego, con un codice come questo:

FILE *fp=fopen("file","r+");
fseek(fp, 4L, SEEK_SET);
printf("%c\n", (unsigned char) fgetc(fp));
fputc('o', fp);
while(!feof(fp))
printf("%c", (unsigned char) fgetc(fp));


In output (presumendo un file contenente 4+ caratteri) appare il carattere alla posizione 4. Quando poi vado a stampare il contenuto del file, mi accorgo che il carattere (o nell'esempio) invece di sovrascrivere la posizione 5 (perché fgetc() avanza nello stream) viene appeso alla fine del file, proprio come se tra fgetc() e fputc() invocassi fseek(fp, 0L, SEEK_END);

FIX'D

cionci
24-01-2010, 12:16
Il carattere di fine file è EOF, il valore che assume dipende da sistema operativo a sistema operativo.

"w+" Create an empty file for both reading and writing. If a file with the same name already exists its content is erased and the file is treated as a new empty file.

M4rk191
24-01-2010, 12:29
Il carattere di fine file è EOF, il valore che assume dipende da sistema operativo a sistema operativo.

"w+" Create an empty file for both reading and writing. If a file with the same name already exists its content is erased and the file is treated as a new empty file.

La prima domanda ha trovato risposta :D
La seconda no, per un errore mio. Nell'esempio ho scritto "w+", mentre avrei dovuto scrivere "r+".