ďťż

Ładny brzuch

Zwracam sie do wszystkich z goraca prosba o pomoc. Siedze juz na tym , ze juz mam dosc i nie mam pomyslu. Pisze juz o co chodzi.

Chcialbym skopiowac do pliku zawartosc ListBoxu, a nastepnie przy ponownym uruchomieniu komputera wczytac jego zawartosc. Potrzebne mi to jest bowiem, gdy zostanie dodany nowy element to przy uruchomieniu programu bedzie wczytany ListBox ze zmianami.

Robie to tak:
Na poczatku struktura, na razie jest w niej jedna zmienna ale w pozniejszym czasie ma byc wiecej

struct Nazwa { char *nazwa; }sred[5];[

Nastepnie dokonuje zapisu:

FILE *stream; if((stream=fopen("55.txt","a"))==NULL) { fprintf(stderr, "Cannot open output file.\n"); } for (int dd=0;dd<p;dd++) { sred[dd].nazwa="aaa"; fwrite(&sred[dd], sizeof(sred),1,stream); } fclose(stream);

W tej sytuacji pokazuje o co mi chodzi, bowiem widac ze za kazdym razem wpisuje slowo "aaa" lecz mi zalezy na tym zeby w tym miejscu wstawial mi dane z poszczegolnych wierszy LisBoxu.Bardziej mi zalezy na typie jaki dana zmienna bedziemiala bo w tym sie gubie, bo sam proces wpisania czy petli jest znany.

A odczyt w ten sposob:

char *h FILE *stream; if((stream=fopen("55.txt","r"))==NULL) { fprintf(stderr, "Cannot open output file.\n"); } for (int dd=0;dd<(k-1);dd++) { fread(&sred[dd], sizeof(sred),1, stream); h=sred[dd].nazwa; ListBox3->Items->Add(h); }

Prosze wiec was o pomoc, choc mala:)



zapis do pliku:
ListBox1->Items->SaveToFile()

odczyt z pliku
ListBox1->Items->LoadFromFile()

Wyżej oczywiście nazwa pliku w nawiasach :)
zapis:void* f = CreateFile("c:\\plik.txt",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,NULL,0); unsigned long r; WriteFile(f,ListBox1->Items->Text.c_str(),ListBox1->Items->Text.Length( ),&r,NULL); CloseHandle(f);odczyt (w oncreate formy)if (FileExists("c:\\plik.txt")) { void* f = CreateFile("c:\\plik.txt",GENERIC_READ,0,NULL,OPEN_EXISTING,NULL,0); unsigned long r; char* buforek = new char[GetFileSize(f,NULL)]; ReadFile(f,buforek,GetFileSize(f,NULL),&r,NULL); ListBox1->Items->Text = buforek; CloseHandle(f); }

ja dodam tylko
http://www.cplusplus...dio/fwrite.html

albo mi sie coś pokręciło albo powinieneś ieć na odwrót argumenty podane w fwrite
w każdym razie przyjrzyj się ;)



Cyrkiel podal idealnie dzialajacy kod. Pozostaje mi tylko go przeanalizowac. Dzieki

A jeszcze pytanie do Cyrkiel> co trzeba by zrobic gdybym chcial wiecej danych zapisac takich, ktore np zapisywane bylyby struktorze np. Imie, wiek , itp

Pytam sie bo potrzebuje zapisac strukture

użyj funkcji fwrite()
łatwo się jej używa, możesz zapisać zarówno jedną tablice jak i całą tablice struktur
Wszystko masz opisane tutaj: http://www.cplusplus...dio/fwrite.html
Jak byś czegos nie zrozumiał to pisz ;)

Ja juz stosowalem ta funkcje. Tylko kwestia jest taka ze kopiujac z listboxu w postaci stringow, to przy odczytywaniu powstaja bzdury, gdy zamieniam stringa na char to powstaja uciecia w tekstach kopiowanych. To co Cyrkiel zaproponowal kopiuje idealnie tylko co w przypadku struktury.

bo teraz zauważyłem jaki straszny ;) błąd popełniłeś w strukturze.
char* w ten sposob tworzymy wskaznik. Czyli miejsce w pamięci komputera gdzie trzymamy dany tekst a dokładniej pierwszy znak takowego. Teraz np. wyłączamy komputer. co się dzieje w to miejsce w pamięci np. inny program zapisał sobie swoje dane. Uruchamiamiy nasz i chcemy się odwołać do tego adresu a tam co ? juz nie nasz tekst ale coś zupełnie innego.
Żeby pozbyć się tego problemu musisz w strukturze stworzyć tablce znaków typu char i tam zapisać swój tekst. Dzięki temu do pliku zapiszemy nie wskaznik na miejsce w pamięci ale nasze konkretne literki ;)

struct CFOO{
char tekst[50];
};

MOże niektóre rzeczy xle tu nazwałem ale w gruncie rzeczy o to chodzi
Użytkownik Artur Menc edytował ten post 14 marzec 2006, 17:54
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •