Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760

    C - "svuotare" file prima read

    Prelevo da 2 file 1 carattere e li accodo in un terzo file e fin qui tutto ok
    Un problema però è dovuto al fatto che non mi svuota il file es
    preleva a b e lo scrive,ma al secondo giro non voglio avere ab ab ma solo ab,come lo svuoto?

    codice:
    main(){
    
    int c=0;int d=0;char a=0;char r=0;int ris=0;
    //svuota
    
    lseek(ris, 0L, SEEK_SET);
    //lavora
    c=open("ciao", O_RDONLY);
    read(c,&a,1);
    printf("\nsono --> %c\n\n",a);
    ris=open("ciaoris", O_WRONLY);
    write(ris,&a,1);
    
    d=open("ciao2", O_RDONLY);
    read(d,&r,1);
    printf("\nsono --> %c\n\n",r);
    lseek(ris, 0, SEEK_END);
    write(ris,&r,2);
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Se non ho capito male, devi indicare

    ris=open("ciaoris", O_WRONLY | O_CREAT | O_TRUNC);

    Dai un'occhiata alla documentazione della funzione open
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760
    grazie! oregon sei qualcosa di straordinario!

  4. #4
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    Originariamente inviato da gabama
    grazie! oregon sei qualcosa di straordinario!
    basterebbe leggere due righe di documentazione cmq

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da ant_alt
    basterebbe leggere due righe di documentazione cmq
    Concordo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760
    avevo dato un occhiata,ma non avevo visto quest' informazione e ho voluto ringraziare oregon che mi aveva risposto tempestivamente
    Vi vorrei ancora chiedere una cosa per passare come valore ad una funzione,passare il titolo del testo alla funzione
    codice:
    #include <stdio.h>
        #include <stdlib.h>
         
        FILE *f;
        char filename[60];
        char c;
         
         main()
        {
       int a=0;
    	a=leggi("ciao");
        }
    
    	int leggi(FILE *f){
       f = fopen("f", "r");
        
       if (f == NULL) printf("Errore nell'apertura del file");
       else
       {
       while (!feof(f))
       {
       c = getc(f);
       putchar(c);
       }
        
       fclose(f);
       }
        
       int ch = getchar();
        
       return 0;
       }

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da gabama
    ... una cosa per passare come valore ad una funzione,passare il titolo del testo alla funzione
    ...
    Non si e' capito molto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760
    stavo provando a creare una funzione per acquisire da un file di testo caratteri da scrivere in un altro file.Non so come passare i parametri

  9. #9
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    Originariamente inviato da gabama
    stavo provando a creare una funzione per acquisire da un file di testo caratteri da scrivere in un altro file.Non so come passare i parametri
    codice:
    int CopyCharByChar(char*source, char*destination){
        FILE*a=fopen(source,"r");
        FILE*b=fopen(destination,"w");
        char x;
        while((x=fgetc(a))!=EOF)fputc(x,b);
        fclose(a);
        fclose(b);            
        }

  10. #10
    In generale comunque una funzione del genere non è particolarmente efficiente, poiché una quantità folle di chiamate a fgetc e fputc; usa piuttosto un buffer di qualche KB (di solito 4 o 8 bastano) in accoppiata con la fread e la fwrite.
    Per inciso, la CopyCharByChar può ricevere parametri const char * invece di semplici char * dal momento che i nomi dei file non vengono modificati; inoltre non capisco perché è dichiarata come int quando non restituisce nulla. Si potrebbe utilizzare il valore di ritorno, ad esempio, per restituire il numero di caratteri copiati o -1 in caso di errore.
    codice:
    int CopyCharByChar(const char*source, const char*destination)
    {
        FILE*a=NULL;
        FILE*b=NULL;
        char x;
        int ret=0;
        if((a=fopen(source,"r"))==NULL)
            return -1;
        if((b=fopen(destination,"w"))==NULL)
        {
            fclose(a);
            return -1;
        }
        while((x=fgetc(a))!=EOF)
        {
            if(fputc(x,b)==EOF)
            {
                ret=-2;
                break;
            }
            ret++;
        }
        fclose(a);
        fclose(b);
        return ret;
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.