Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    138

    [C] Leggere da file e modificare contenuto

    Ciao a tutti!
    Leggendo il titolo del post avrete sicuramente pensato che il mio fosse il solito problema riguardo l'apertura di un file, ecc...

    In realtà, il problema è un po' più complesso (solo un po').

    Praticamente, sto creando un editor e quello che vorrei fare è aprire un file, acquisirne il contenuto, stamparlo a schermo e poi poterlo anche modificare.

    Mi spiego meglio!

    Nel file "myfile.txt" c'è la seguente stringa:
    "Ciao a tutti, mi chiamo X e ho X anni".

    Quello che vorrei fare è aprire questo file, stampare a schermo il contenuto e riuscire anche a modificarlo. Se lo stampo semplicemente a schermo, è impossibile apportare modifiche visto che i carattere stampati non sono più editabili. Vorrei praticamente poter cancellare l'intera stringa e scrivere qualcosa di totalmente diverso, e infine salvare il file modificato.

    Non chiedetemi codice perchè non ho ancora scritto niente... non so come muovermi!

    Grazie in anticipo per le eventuali risposte che vorrete darmi!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Una sorta di notepad ... un editor ...

    Apri il file e leggilo tutto in un buffer.

    A questo punto devi mostrare il contenuto del buffer a video e poterlo modificare.

    Alla fine apri il file e scrivi il buffer modificato.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    138
    Il problema è proprio questo:
    come faccio a fare una cosa del genere?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Beh, perché non inizi a scrivere il codice per aprire il file e leggerlo?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    138
    Già fatto... mi manca solo questa parte per completare il mio editor base!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da kaiser89
    Già fatto... mi manca solo questa parte per completare il mio editor base!
    Questa parte "quale"?

    In ogni caso, che tipo di progetto usi (console, gui)?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    138
    Il programma opera nella console... non so ancora programmare un'interfaccia grafica!

    La parte che mi manca è proprio quella che mi permette di modificare il file in tempo reale.

    Mi rendo conto che forse non mi sono ben spiegato sul da farsi... purtroppo, è un po' complicato da spiegare a parole!

    Non voglio stampare a schermo il contenuto del file e poi sostituirlo con il nuovo contenuto. Per essere precisi, non voglio fare questo:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
        FILE *stream = NULL;
        int filesize, check, blocks = 1;
        char *buffer = NULL, c;
    
        stream = fopen("myfile.txt", "r");
    
        if (stream == NULL){
            fprintf(stderr, "Errore: impossibile aprire il file");
            exit(1);
            }
    
        fseek(stream, 0, SEEK_SET);
        filesize = ftell(stream);
        rewind(stream);
        
        buffer = (char*)malloc(filesize * sizeof(char));
    
        if (buffer == NULL){
            fprintf(stderr, "Errore: impossibile allocare la memoria necessaria");
            exit(2);
            }
    
        check = fread(buffer, 1, filesize, stream);
    
        if (check != filesize){
            fprintf(stderr, "Errore: impossibile leggere dal file specificato");
            exit(3);
            }
    
        printf("Il contenuto attuale del file e': \n%s", buffer);
    
        fclose(stream);
        free(buffer);
        buffer = NULL;
    
        stream = fopen("myfile.txt", "w");
    
        if (stream == NULL){
            fprintf(stderr, "Errore: impossibile aprire il file");
            exit(1);
            }
        
        printf("Inserire il nuovo contenuto del file: \n");
        while (c = getchar()){
            buffer = (char*)realloc(buffer, blocks * sizeof(char));
    
            if (buffer == NULL){
                fprintf(stderr, "Errore: impossibile allocare la memoria necessaria");
                exit(2);
                }
    
            if (c == '\n'){
                buffer[blocks-1] = '\0';
                break;
                }
    
            buffer[blocks-1] = c;
            blocks++;
            }
    
        check = fwrite(buffer, 1, blocks, stream);
    
        if (check != blocks){
            fprintf(stderr, "Errore: impossibile scrivere sul file specificato");
            exit(3);
            }
    
        fclose(stream);
        free(buffer);
    
        return 0;
    }
    Se avevi capito questo, avevi capito male!

    P.S.= Se c'è qualche errore nel codice è perchè l'ho scritto di getto... non ho testato questo codice, ma serve a rendere l'idea!

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Se spieghi bene cosa vuoi fare, allora potrai avere una risposta.

    Se lavori in console devi visualizzare il file in console con le API di gestione della console (che trovi su MSDN) partendo da un buffer in memoria.

    Ovviamente la visualizzazione e l'input non saranno "comodissimi" (come in una finestra di Windows).

    Alla fine potrai salvare su disco il buffer modificato.


    Le API che dovrai utilizzare sono queste

    http://msdn.microsoft.com/en-us/libr...sktop/ms682073(v=VS.85).aspx
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    138
    Purtroppo, come ti ho detto, non riuscivo a trovare un modo per spiegarlo a parole!

    Conosci l'equivalente di quete funzioni su sistem unix-like, perchè uso debian!

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da kaiser89
    perchè uso debian!
    E dirlo prima?

    Studia la libreria ncurses
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.