Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di echoweb
    Registrato dal
    Sep 2008
    Messaggi
    419

    [C++] Borland - Lettura File

    Ciao a tutti,
    sto cercando di leggere un file txt riga per riga e mettere il contenuto in una listbox.

    Il codice che ho fatto funziona solo la prima volta. La seconda non va e non riesco a capire come mai.

    codice:
    void __fastcall TForm1::btn_sfogliaClick(TObject *Sender)
    {
            char *app_nomefile;
            char *s = "";
            FILE *FileIn;
    
            if(OpenDialog1->Execute())
            {
                    txt_nomefile->Text= OpenDialog1->FileName;
    
                    strcpy (app_nomefile,OpenDialog1->FileName.c_str());
    
                    FileIn = fopen(app_nomefile,"r+");
    
                    if(FileIn != NULL)
                    {
                            while(!feof(FileIn))
                            {
                                    fgets(s,1000,FileIn);
                                    list_contenuto -> Items -> Add (s) ;
                            }
                    }
                    else
                    {
                           list_contenuto -> Clear();
                           ShowMessage("Errore nell'apertura del file");
                    }
                    fclose(FileIn);
    
            }
    
    }
    Andando in debug, la seconda volta mi dice che la variabile FileIn vale NULL, ma il nome del file viene passato correttamente.

    Grazie in anticipo.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Più che altro mi chiedo come faccia a non andare in crash visto che non allochi spazio ne per poter scrivere su app_nomefile (operazione per altro inutile, visto che usi txt_nomefile->Text come oggetto d'appoggio), ne per poter scrivere su s ( che andrebbe inizializzato a NULL o 0, non con "")
    Comuque puoi fare direttamente:
    codice:
    FileIn = fopen(txt_nomefile->Text.c_str(),"r+");
    per aprire il file, risparmiando una linea di codice e un crash annunciato.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it L'avatar di echoweb
    Registrato dal
    Sep 2008
    Messaggi
    419
    Originariamente inviato da shodan
    Più che altro mi chiedo come faccia a non andare in crash visto che non allochi spazio ne per poter scrivere su app_nomefile (operazione per altro inutile, visto che usi txt_nomefile->Text come oggetto d'appoggio), ne per poter scrivere su s ( che andrebbe inizializzato a NULL o 0, non con "")
    Comuque puoi fare direttamente:
    codice:
    FileIn = fopen(txt_nomefile->Text.c_str(),"r+");
    per aprire il file, risparmiando una linea di codice e un crash annunciato.
    Non so se hai avuto modo di provare il codice che ho postato (da quello che hai scritto suppongo di no); il codice non va in crash e forse ci sono, come hai detto tu, dei passaggi che si possono evitare.

    Quello che hai scritto in merito a FileIn = fopen(txt_nomefile->Text.c_str(),"r+"); è corretto, ma il risultato non cambia.

    Sto cercando di leggere riga per riga un file di testo e riesco a fare questa operazione solo la prima volta; la seconda non funziona e non riesco a capire come mai.

    Se qualcuno ha tempo e/o voglia di testare quello che ho postato, deve inserire i seguenti oggetti:
    - pulsante chiamato btn_sfoglia
    - text box chiamato txt_nomefile
    - list box chimato list_contenuto

    e nel codice del pulsante sfoglia, inserire il codice che ho postato all'inizio.

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Certi errori si riconoscono a vista.
    Comunque per scrupolo l'ho provato e come mi aspettavo ho avuto un crash nella strcpy e poi nella fgets. Sistemati quegli errori, tutto è filato liscio.

    Cambia char *s = ""; in char s[1000];
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5

    Re: [C++] Borland - Lettura File

    codice:
    void __fastcall TForm1::btn_sfogliaClick(TObject *Sender)
    {
            if (OpenDialog1->Execute())
            {
                    txt_nomefile->Text= OpenDialog1->FileName;
                    list_contenuto->Items->LoadFromFile(OpenDialog1->FileName);
            }
    }
    Al limite proteggi il caricamento con un try...catch.

    HTH,

  6. #6
    Utente di HTML.it L'avatar di echoweb
    Registrato dal
    Sep 2008
    Messaggi
    419
    @shodan
    Grazie, era proprio quello il problema!!!

    @ESSE-EFFE
    Hai ragione, il fatto di proteggere con un try ... catch è sempre utile.


    Vi ringrazio.

  7. #7
    @shodan
    Grazie, era proprio quello il problema!!!

    @ESSE-EFFE
    Hai ragione, il fatto di proteggere con un try ... catch è sempre utile.
    Ehm, giusto per precisare, ma alla fine che codice stai utilizzando? Perchè io il try...catch te l'ho suggerito nel caso utilizzi il metodo LoadFromFile, non "sempre"...

  8. #8
    Utente di HTML.it L'avatar di echoweb
    Registrato dal
    Sep 2008
    Messaggi
    419
    @ESSE-EFFE

    Volevo dire che nello script che ho fatto, in caso di errori, l'uso del try ... catch puo' evitare di far bloccare l'applicazione.

  9. #9
    Volevo dire che nello script che ho fatto, in caso di errori, l'uso del try ... catch puo' evitarre di far bloccare l'applicazione.
    Proprio per questo volevo sapere quale codice avevi utilizzato, perchè un try...catch può avere senso nel caso della LoadFromFile, ma se hai tenuto tutto il codice originario non molto.

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