Problem z zapisem do pliku w WxWidgets

0

Witam.

Ostatnio piszę program w bibliotece WxWidgets i zapis taki działa prawidłowo i zapisuje to do pliku co jest w etykiece WxEdit1.

if(WxSaveFileDialog1->ShowModal()==wxID_OK)
{
WxEdit1->SaveFile(WxSaveFileDialog1->GetPath());
}

Ale gdy chcę zapisać kilka etykiet czyli

if(WxSaveFileDialog1->ShowModal()==wxID_OK)
{
WxEdit1->SaveFile(WxSaveFileDialog1->GetPath());
WxEdit2->SaveFile(WxSaveFileDialog1->GetPath());
WxEdit3->SaveFile(WxSaveFileDialog1->GetPath());
// i tak dalej...
}

to albo zapisuje tylko ostatnią etykietę czyli w tym przepadku to WxEdit3 lub nic nie zapisuje do pliku.

A moje pytanie brzmi: Jak zapisać ten skrawek kodu żeby zapisywał każdą etykietę do pliku bo próbuje już prawie wszystkiego i nie ma żadnego efektu

Bardzo dziękuje za każdą odpowiedź i życzę miłego dnia.

PS:To mój pierwszy post na tym forum.

0

przecież to jasne, każde wywołanie metody SaveFile, nadpisuje plik, więc czego się spodziewasz?

0

A wiesz jak napisać ten skrawek kodu żeby zapisywał każdą etykietę czyli WxEdit do pliku i jako go otworzę to wszystkie dane były.

0

wx-y uzywałem w czasie gdy bylo to wxwindows, wiec nie wiem, nie pamiętam, czy jest taka możliwość, na pewno możesz to zrobić samodzielnie otwierając plik i zapisując dane z kontrolek.

0

Dobra dzięki już to jest 2 forum na którym się zapytałem o to i nikt nie zna rozwiązania czy ta biblioteka to jakaś nie używana czy co ? ale no cóż trudno jeszcze raz dzięki za odpowiedź.

Ale może ktoś inny będzie wiedział i bym był bardzo wdzięczny.

0

A wystarczyło zajrzeć do manuala... Domyslam się (bo oczywiście nie napisałeś tego), że korzystasz z wxTextCtrl, w dokumentacji jest podany przykład jak skorzystać ze streambuf-a, podobnie skorzystasz z ostreama...

0

Tak korzystam z wxTextCtrl i czy dobrze patrzę to jest to co mówisz //docs.wxwidgets.org/3.0/classwx_text_ctrl.html

PS:Spróbowałem tym sposobem SaveFile tak jak jest na stronie i nic mi to nie daje nadal zapisuje tak jak było. Oto kod:

int typ;
    const wxString name=wxEmptyString;
    WxEdit1->SaveFile(name,typ=wxTEXT_TYPE_ANY);
    WxEdit2->SaveFile(name,typ=wxTEXT_TYPE_ANY);
0

Przetestowałem dwa sposoby oto pierwszy czyli podaję ścieżkę do pliku ale nic nie zapisuje:

    const  wxString name="D:\Programowanie test programu.txt";
    int krzat=wxTEXT_TYPE_ANY;
    WxEdit1->SaveFile(name,krzat);
    WxEdit2->SaveFile(name,krzat);

A to jest drugi sposób który zapisuje ale problem polega na tym że zapisuje tylko ostatnią etykietę czyli w tym przypadku to WxEdti2:

 const wxString name=WxSaveFileDialog1->GetPath();
    int krzat=wxTEXT_TYPE_ANY;
    WxEdit1->SaveFile(name,krzat);
    WxEdit2->SaveFile(name,krzat);
0

No to czytaj dokładniej, napisałem, że metoda SaveFile nie jest tu dobrym wyborem i podpowiedziałem, by zobaczyć, że obiekt ten dziedziczy po streamie. Otwórz ofstream i wykorzystaj to.

0

Bardzo przepraszam ale już zgłupiałem z tym zapisem ale zauważyłem o co chodzi czy to jest ten skrawek kodu:

wxTextCtrl *control = new wxTextCtrl(...);
ostream stream(control)
stream << 123.456 << " some text\n";
stream.flush();

Bo jeżeli tak to próbuje go wykorzystać w moim programie to wyskakuje strasznie dużo błędów i bym prosił o napisanie tego skrawku kodu przez was jak powinien wyglądać.

PS:Jak coś ja jestem dopiero początkujący w tej bibliotece i ledwo co za czołem czytać książkę o tej bibliotece a tam o takim zapisie nic nie ma i pokazali jak maksymalnie zapisać jedną etykietę.

0

To ja wiem że to jest przykład a podstawy znam bo już jestem w 2 tomie Jerzego Grębosza Symfonii C++ standard tylko nie mogę zrozumieć tego zapisu i dla tego proszę was o napisane tego skrawka kodu jak z wytłumaczenie co robi najlepiej było by w komentarzach.Jak powyżej pisałem jestem dopiero początkujący w tej bibliotece. Dziękuje za każdą odpowiedź i życzę miłego dnia.

PS:Trochę posiedziałem w kompilatorze i napisałem kod który się kompiluje ale nic nie zapisuje.Oto ten kod:

 std::ostream plik(WxEdit1);
     plik<<WxEdit1<<"\n";
     plik.flush();
0

Bardzo dziękuje każdemu kto mi odpowiedział w tej sprawie ale problem rozwiązałem sam trochę się pobawiłem i znalazłem rozwiązanie. Jeszcze raz bardzo dziękuje każdemu kto mi odpowiedział i życzę miłego dnia.

PS:Jeżeli ktoś ma również z tym problem to macie jedno rozwiązanie pewnie z kilku innych. Oto Kod z tłumaczeniem

 std::fstream plik;  //zmiena fstream
     plik.open(WxSaveFileDialog1->GetPath(),std::ofstream::out|std::ofstream::app); //otwieranie pliku i jako piewrwszy argument jest nazwa pliku który jest zwracany przez WxSaveFileDialog , drugie parametry to argumenty do zapisu i dopisania do pliku
     plik<<"   Energia       "<<std::endl;  //zmiena fstream<<i tu ma być to co ma zapisać program
     plik<<"Faza 1:  "<<WxEdit1->GetValue()<<std::endl; //tu jest to samo tylko tu ma zwrócić to co obecnie posiada WxEdit czyli zapis WxEdit1->GetValue()
     plik<<"Faza 2:  "<<WxEdit2->GetValue()<<std::endl;
     plik<<"   Woda          "<<std::endl;
     plik<<" "<<WxEdit3->GetValue()<<"  M3"<<std::endl;
     plik<<"   Data          "<<std::endl;
     plik<<WxEdit5->GetValue()<<std::endl;
     plik<<"--------------------"<<std::endl;
     plik.close(); //i najważniejsze to zamknąć plik 

Liczę że ten zapis pomoże wielu ludziom. Życzę miłego dnia oraz powodzenia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1