PDA

Visualizza la versione completa : [c] Aiuto su puntatori a FILE


milazzo.g
28-02-2014, 23:14
Buonasera a tutti! Cerco un aiuto per il seguente codice... Praticamente vorrei salvare su un file un flag per segnalare al programma stesso se questo sia stato lanciato già altre volte in modo da non richiedere la registrazione di un account amministratore... In teoria pensavo che non riuscendo ad aprire il file in lettura (se è la prima volta che eseguo il programma) il primo if è soddisfatto quindi rientro nel secondo... stranamente non riesce a creare il file! Premetto che se provo a commentare tutto e lascio solo "file = fopen(CONFIG, "w")" il file viene creato tranquillamente... Chiedevo dunque (visto che su windows un codice molto simile mi andava alla grande, ma adesso sono su ubuntu con gcc perchè lunedì ho un esame)... Quale può essere l'errore?:dhò: Grazie in anticipo, Giuseppe..



#define CONFIG "/home/giuseppe/Orale/config.dat"
/*
main e codice vario...
*/
int lcf(){
FILE *file;
int j;
if ((file = fopen(CONFIG, "r")) == NULL){
if((file = fopen(CONFIG, "W")) == NULL){
printf(ERROR2);
return -1;
} else {
fprintf(file, "%d", 1);
fclose(file);
return 0;
}
} else {
fscanf(file, "%d", &j);
j +=1;
file = fopen(CONFIG, "w");
fprintf(file, "%d", j);
fclose(file);
return j;
}
}

infinitejustice
01-03-2014, 02:23
Su linux, se cambi quel "W" in "w" funziona... crea il file alla prima esecuzione e salva il valore 1. Alla seconda esecuzione, aggiunge 1 al valore precedentemente salvato.

Scara95
01-03-2014, 08:48
Su linux, se cambi quel "W" in "w" funziona... crea il file alla prima esecuzione e salva il valore 1. Alla seconda esecuzione, aggiunge 1 al valore precedentemente salvato.
In verità w apre il file e lo tronca se esiste. Lo crea se non esiste.
http://www.cplusplus.com/reference/cstdio/fopen/

milazzo.g
02-03-2014, 13:53
Su linux, se cambi quel "W" in "w" funziona... crea il file alla prima esecuzione e salva il valore 1. Alla seconda esecuzione, aggiunge 1 al valore precedentemente salvato.

Risolto per caso riscrivendo tutto... l'errore era solo quella maledetta w maiuscola! grazie lo stesso!

Loading