Messaggioda lorven » 10/07/2006, 15:50

no è tecnicamente esatto che bisogna per forza chiudere un file prima di riaprirlo...

Reopen equivale a Close+Open...

:-)
Un giorno senza sorriso è un giorno perso.
Charlie Chaplin
Avatar utente
lorven
Junior Member
Junior Member
 
Messaggio: 179 di 369
Iscritto il: 06/12/2005, 20:55

Messaggioda eugenio.amitrano » 11/07/2006, 10:07

Ecco una funzione richiesa di conferma "abbastanza" pulita (ho preso spunto dalle precedenti risposte) e come si usa:

Codice:
#include <conio.h>
#include <stdio.h>

enum { __NO, __YES };

void beep(void) { printf("\a"); }

int getConfirm(const char * __sMessage)
{
   char __retCH;
   int __exit;

   printf("\n%s (s/n) ", __sMessage);

   do {
      __exit = 1;
      __retCH = getch();
      if(__retCH != 's' &&
         __retCH != 'S' &&
         __retCH != 'n' &&
         __retCH != 'N')
      {
         __exit = 0;
         beep();
      }
   } while (!__exit);

   if (__retCH == 'n' || __retCH == 'N')
      return __NO;
   else
      return __YES;
}

void main(void)
{
   int sel;

   clrscr();

   sel = getConfirm("Salutare ?");
   if(sel)
      printf("\n\nBUONGIORNO!");

   printf("\n\nPremere un tasto per uscire.");
   getch();
}


ma a cosa ti serve una conferma se devi scrivere in append ? (almeno cosi' sembra trasparire)

Comunque per suggerire la migliore gestione del file occorre conoscere la finalita' del file.

Per il momento vedo per te una gestione del segunete tipo:

Codice:
int ..function_write.. (const char *fileOutName, .. ..)
{
   ...
   FILE *fileOutPtr;
   ...

   if((fileOutPtr = fopen(fileOutName, "a")) == NULL)
   {
      printf("\a\nERRORE: Impossibile aprire il file %s", fileOutName);
      printf("\n\nVerificare una delle seguenti possibili cause:");
      printf("\n - Il disco in uso e' pieno;");
      printf("\n - Si sta utilizzando una memoria non scrivibile o protetta da scrittura;");
      printf("\n - Il nome del file specificato non e' corretto;");
      ...
      return .. error_code_x ..;
   }

   /* da qesto punto parte l'azione di scrittura ne file */
   ....
   ....

   fclose(fileOutPtr);
}


A presto,
Eugenio
Avatar utente
eugenio.amitrano
Senior Member
Senior Member
 
Messaggio: 392 di 1375
Iscritto il: 15/02/2006, 16:16

Messaggioda gigilatrottola » 11/07/2006, 14:19

una domanda: se il file esiste e uno sceglie di non sovrascrivere... sceglie di non salvarlo?
in questo caso potresti...

1. aprire il file per verificare se esiste già e quindi chiudere quel puntatore.
2. aprirne un altro e, se l'utente vuole sovrascrivere, allora aprire il file in scrittura. nel tuo codice noto che tu lo apri in scrittura ancor prima di sapere cosa intende fare l'utente. Se l'apertura la fai dentro l'if sei sicuro che l'else non fa danni, visto che non puo accedere a quel segmento di codice.
Avatar utente
gigilatrottola
Junior Member
Junior Member
 
Messaggio: 64 di 223
Iscritto il: 21/08/2005, 15:54

Messaggioda eugenio.amitrano » 11/07/2006, 14:34

Ciao Gigi,
scusami, ma non mi e' chiaro a chi ti rivolgi.
Perdonami se posso sembrarti egocentrico pensando che ti rivolgi a me, comunque, se cosi' fosse ti chiedo di essere un po' piu' chiaro.

Eugenio
Avatar utente
eugenio.amitrano
Senior Member
Senior Member
 
Messaggio: 396 di 1375
Iscritto il: 15/02/2006, 16:16

Messaggioda gigilatrottola » 11/07/2006, 14:48

Ah no scusa, mi riferivo a chi ha aperto il topic :)
Avatar utente
gigilatrottola
Junior Member
Junior Member
 
Messaggio: 65 di 223
Iscritto il: 21/08/2005, 15:54

Messaggioda eugenio.amitrano » 11/07/2006, 15:39

;-)
Avatar utente
eugenio.amitrano
Senior Member
Senior Member
 
Messaggio: 397 di 1375
Iscritto il: 15/02/2006, 16:16

Messaggioda groucho » 14/07/2006, 00:36

lorven ha scritto:
no è tecnicamente esatto che bisogna per forza chiudere un file prima di riaprirlo...

Reopen equivale a Close+Open...

:-)


hai ragione lorven... il mio italiano è pessimo! :lol:
intendevo... non c'è bisogno di fclose() per forza :-D

sorry per il disguido lessicale :wink:
Avatar utente
groucho
Starting Member
Starting Member
 
Messaggio: 14 di 16
Iscritto il: 27/06/2006, 22:17

Precedente

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite