Ĺ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
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