IALweb Homepage
Forum Home Forum Home > Programmazione > Programmazione > C/C++ - VISUAL C++
  New Posts New Posts RSS Feed - Problema programmino Visual C++ 2008
  FAQ FAQ  Forum Search   Events   Register Register  Login Login


REGISTRATEVI su IALWeb forum!

Topic ClosedProblema programmino Visual C++ 2008

 Post Reply Post Reply
Author
Message
mancuso-a View Drop Down
Nuovo Utente
Nuovo Utente
Avatar

Joined: 03/Dic/2009
Location: Italy
Status: Offline
Points: 6
Direct Link To This Post Topic: Problema programmino Visual C++ 2008
    Posted: 03/Dic/2009 at 03:26
Ciao a tutti, sono nuovo del forum. Sono alle prime armi con le windows form.
Ho un problema. Devo creare un semplice programma in visual c++ 2008, che utilizza
una finestra in cui ci sono due "Textbox" e due "button". Dovrei in pratica prendere dei valori dalle textbox e salvarli su file.dat e poi fare il viceversa. Ho creato un progetto CLR vuoto, poi ho aggiunto una windows form e dei widget( due "textbox" e due "button"), poi ho inserito le chiamate alle funzioni nell'evento dei "button".
I dati sono contenuti all'interno di un oggetto la cui classe prevede due attributi,

class Esempio{
        public:
        char* nome;
        char* cognome;
        Esempio(){
            nome=NULL;
            cognome=NULL;
            }
};

la funzione per salvare i dati su file è questa:
void textbox::finestra::salvadati(){
        Esempio appoggio;
        fstream salva;
        appoggio.nome=(char*)(Marshal::StringToHGlobalAnsi(nome->Text)).ToPointer();
        appoggio.cognome=(char*)(Marshal::StringToHGlobalAnsi(cognome->Text)).ToPointer();
        salva.open("prova.dat", ios::out | ios::binary | ios::beg | ios::ate);
        salva.write((char *)&appoggio, sizeof(Esempio));
        salva.close();
}

nome e cognome  sono i nomi delle "textbox"
La funzione deve scrivere solo un oggetto su file, se ne esiste già uno cancella il file.

la funzione per caricare i dati da file e metterli nelle "textbox" è questa:

void textbox::finestra::caricadati(){
        fstream leggi;
        Esempio current;
        leggi.open("prova.dat", ios::in  | ios::binary | ios::beg );
        if(leggi.fail()==false)
        leggi.read((char *)& current, sizeof(Esempio));
        nome->Text= gcnew String((char*)current.nome, 0, 20);
        cognome->Text= gcnew String((char*)current.cognome, 0, 20);
        leggi.close();
}

Ora vi spiego il mio problema.
Il tutto funziona solo se non chiudo il programma. Io ho pensato che fosse dovuto al fatto che riesce da solo a prendere i dati dalla memoria managed. Se chiudo il programma, con i dati salvati sul file non funziona più.
Qualcuno mi sa dire quali sono gli errori??
Se la mia è la strada giusta o devo utilizzare altre classi per la scrittura e la lettura da file?? Per chi volesse provare il programma posso mandare i sorgenti.
Grazie in anticipo.


Antonio
Back to Top
Sponsored Links


Back to Top
mancuso-a View Drop Down
Nuovo Utente
Nuovo Utente
Avatar

Joined: 03/Dic/2009
Location: Italy
Status: Offline
Points: 6
Direct Link To This Post Posted: 14/Dic/2009 at 12:08

PROBLEMA RISOLTO


Il codice funzionante è questo:

class Esempio{
   
    public:
        char nome[20];
        char cognome[20];

        Esempio(){
            strcpy(nome,"");
            strcpy(cognome,"");
           
        }
       
};


void textbox::finestra::salvadati(){
       
        Esempio appoggio;
        fstream salva;
        char* str1 = (char*)(Marshal::StringToHGlobalAnsi(nome->Text)).ToPoint er();
        char* str2 = (char*)(Marshal::StringToHGlobalAnsi(cognome->Text)).ToPo inter();
        strcpy(appoggio.nome, str1);
        strcpy(appoggio.cognome, str2);
        salva.open("prova.dat", ios::out | ios::binary | ios::beg | ios::ate);
        salva.write((char *)&appoggio, sizeof(Esempio));
        salva.close();
}


void textbox::finestra::caricadati(){
       
        fstream leggi;
        Esempio current;
        leggi.open("prova.dat", ios::in  | ios::binary | ios::beg );
        if(leggi.fail()==false)
        leggi.read((char *)& current, sizeof(Esempio));
        nome->Text= gcnew String((char*)current.nome, 0, 20);
        cognome->Text= gcnew String((char*)current.cognome, 0, 20);
        leggi.close();
}



Mi meraviglio però che in un forum come questo nessuno mi abbia saputo suggerire delle soluzioni.
Grazie mille lo stesso.
Spero di essere più fortunato al prossimo problema.
A presto.
Antonio
Back to Top
 Post Reply Post Reply
  Share Topic   

Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 10.17
Copyright ©2001-2013 Web Wiz Ltd.

This page was generated in 0,047 seconds.