Pagina 3 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 32

Discussione: [C] fwrite error?

  1. #21
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non e' possibile "inserire" dati nel file ma solamente "sostituire" caratteri.

    P.S. E' necessario aprire un nuovo thread perche' non hai piu' un problema di fwrite ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  2. #22
    Originariamente inviato da oregon
    Non e' possibile "inserire" dati nel file ma solamente "sostituire" caratteri.

    P.S. E' necessario aprire un nuovo thread perche' non hai piu' un problema di fwrite ...
    Giusto, preciso che è però possibile "appendere" dati in coda ad un file esistente.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #23
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Samuele_70
    Giusto, preciso che è però possibile "appendere" dati in coda ad un file esistente.
    Sicuro ... non a caso avevo scritto "inserire" ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #24
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    Originariamente inviato da oregon
    Sicuro ... non a caso avevo scritto "inserire" ...
    ero sicuro di questo...e nonostante ciò ho voluto fare il programma così ..il problema è che il file rimane intatto...non sostituisce neanche i caratteri..

    qual è il metodo più semplice per fare quello che ho chiesto?

  5. #25
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Per evidenziare la sostituzione dei caratteri, ecco la funzione modificata

    codice:
    void raddoppiaInFile (FILE *file, char c)
    {
    	int car;
    
    	while((car=fgetc(file))!=EOF)
    		if(car==c) 
    		{
    			fseek(file, 0, SEEK_CUR); 
    			fputc(car, file);
    			fseek(file, 0, SEEK_CUR); 
    		}
    }
    Per risolvere il tuo problema, quello di aggiungere dati "tra" quelli gia' esistenti, devi creare un nuovo file leggendo da quello vecchio e, alla fine, eliminare il vecchio ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #26
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    Originariamente inviato da oregon
    Per evidenziare la sostituzione dei caratteri, ecco la funzione modificata

    codice:
    void raddoppiaInFile (FILE *file, char c)
    {
    	int car;
    
    	while((car=fgetc(file))!=EOF)
    		if(car==c) 
    		{
    			fseek(file, 0, SEEK_CUR); 
    			fputc(car, file);
    			fseek(file, 0, SEEK_CUR); 
    		}
    }
    Per risolvere il tuo problema, quello di aggiungere dati "tra" quelli gia' esistenti, devi creare un nuovo file leggendo da quello vecchio e, alla fine, eliminare il vecchio ...

    scusami ma non ho capito xke hai posizionato l'indicatore di posizione del file alla posizione corrente (con fseek) :master: ..a me sembra un'istruzione inutile (fgetc si occupa di far scorrere l'indicatore), ma dato che senza non funziona, vorrei capire perchè

  7. #27
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da ant_alt
    scusami ma non ho capito xke hai posizionato l'indicatore di posizione del file alla posizione corrente (con fseek) :master: ..a me sembra un'istruzione inutile (fgetc si occupa di far scorrere l'indicatore), ma dato che senza non funziona, vorrei capire perchè
    Da un qualsiasi manuale o libro ...

    "On streams open for update (read+write), a call to fseek allows to switch between reading and writing."
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #28
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    Originariamente inviato da oregon
    Da un qualsiasi manuale o libro ...

    "On streams open for update (read+write), a call to fseek allows to switch between reading and writing."
    sto odiando il mio Deitel&Deitel, per ogni funzione devo scervellarmi su internet..per fseek c'è un paragrafino di 3 righe.

    praticamente in un file aperto con "r+" ho bisogno di una chiamata "nulla" di fseek per passare letteralmente dall'uso di funzioni per la lettura alla scrittura?

    abbi pazienza ma in php queste cose non esistono proprio e sono una novità per me e vorrei capirle bene (anche perchè l'esame è lunedi):

    1. fopen in modalità "r+"
    2. chiamo ad esempio fgetc (lettura)
    3. per usare una funzione di scrittura devo prima chiamare fseek
    4. fputc
    5. di nuovo fseek per tornare in "modalità" lettura

    se al posto del punto 2 avessi messo una fputc per usare fgets avrei comunque dovuto chiamare prima fseek?giusto?


    spero di essermi spiegato

    ps: forse questa cosa esiste solo per funzioni sui char (appunto fgetc e fputc) dato che nell'esercizio precedente con fread fwrite non l'abbiamo usata

  9. #29
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #30
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    siamo in dirittura d'arrivo, volevo ringraziare i parenti e gli amici tutti che mi hanno aiutato

    http://forum.html.it/forum/showthrea...1#post10931971

    ho visto qui che esistono remove e rename in stdio.h

    ma come le ho usate non funzionano (il file dump.txt è creato correttamente)

    codice:
    void raddoppiaInFile (FILE *file, char c)
    {
    	int car;
    FILE *temp= fopen("dump.txt", "w");
    	while((car=fgetc(file))!=EOF){
    		fputc(car, temp);
            if(car==c) fputc(car, temp);
    
    		fclose(file);
    		fclose(temp);
    		remove ("testo.txt");
    		rename("dump.txt", "testo.txt");
    		//ritornano 0 se vanno a buon fine, 1 altrimenti
        }
    }
    
    
    int main (){
        FILE *file1 = fopen ("testo.txt","r+");
        if (file1==NULL) printf("file not found");
        char car='a';
        raddoppiaInFile (file1, car);
        fclose(file1); 
        system("PAUSE");
        return 0;
        }

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 © 2025 vBulletin Solutions, Inc. All rights reserved.