Avatar billede alquesm Nybegynder
03. maj 2001 - 23:49 Der er 13 kommentarer og
1 løsning

Underligt problem

Jeg er i gang med et program som tilfældigvis skal gemme nogle strenge i en fil. Disse strenge fik den fra nogle editboxes. (Jeg bruger Borland C++ Builder 5.0) Jeg havde 5 editboxes. Men pga. at jeg havde glemt at de skulle være i en groupbox var jeg nød til at slette disse 5 editboxes og så lave dem igen inde i groupbox\'en. Jeg gav dem NØJAGTIG de samme navne, og troede at det virkede. MEN sådan skulle det ikke gå. Nu kan den ikke indlæse filen korrekt. Jeg har som sagt 5 strenge, og i de sidste 4 strenge mangler det første tegn altid. Hvis jeg gemmer strengene som tomme får jeg en masse underlige tegn. (Fejl i hukommelsesadressen!?) Jeg ved det ikke, men her er koden. Håber at i forstår hvad problemet er, ellers så spørg, så skal jeg nok prøve at uddybe det.

Her er funktionen som gemmer indholdet af de 5 editboxes i en fil (RCT.RCT)

void __fastcall TForm1::GemIndsClick(TObject *Sender)
{
        FILE *Stream;

        class paths{
        public:
                char csg[100];
                char bsp[100];
                char vis[100];
                char rad[100];
                char map[100];
        } stier;

        strcpy(stier.csg, Ed_CSG->Text.c_str());
        strcat(stier.csg, \"\\0\");
        strcpy(stier.bsp, Ed_BSP->Text.c_str());
        strcat(stier.bsp, \"\\0\");
        strcpy(stier.vis, Ed_VIS->Text.c_str());
        strcat(stier.vis, \"\\0\");
        strcpy(stier.rad, Ed_RAD->Text.c_str());
        strcat(stier.rad, \"\\0\");
        strcpy(stier.map, Ed_map->Text.c_str());
        strcat(stier.map, \"\\0\");

        Stream = fopen(\"RCT.RCT\", \"w\");

        fwrite(&stier, sizeof(stier), 1, Stream);

        fclose(Stream);

}
//---------------------------------------------------------------------------

Her er funktionen som indlæser indholdet af de 5 editboxes fra filen på harddisken (RCT.RCT)

void __fastcall TForm1::HentIndsClick(TObject *Sender)
{
        FILE *Stream;

        class paths{
        public:
                char csg[100];
                char bsp[100];
                char vis[100];
                char rad[100];
                char map[100];
        } stier;

        Stream = fopen(\"RCT.RCT\", \"r\");

        fseek(Stream, SEEK_SET, 0);

        fread(&stier, sizeof(stier), 1, Stream);

        fclose(Stream);

        Ed_CSG->Text = stier.csg;
        Ed_BSP->Text = stier.bsp;
        Ed_VIS->Text = stier.vis;
        Ed_RAD->Text = stier.rad;
        Ed_map->Text = stier.map;
}
//---------------------------------------------------------------------------
Avatar billede alquesm Nybegynder
03. maj 2001 - 23:51 #1
Det skal lige siges at det er Ed_Map som der er noget galt med. For hvis jeg fjerner alle linierne som har noget at gøre med Ed_Map, så virker det fint. Men ikke når jeg har den med. Meeeget mystisk.......help plz!
Avatar billede borrisholt Novice
04. maj 2001 - 07:26 #2
Jeg ved ikke lige hvad der er galt med din procedure, men det er noget hlet basalt galt med hele konceptet ....

Når du du har CB 5.0 Hvorfor i alverden bruger du så Char array\'s ? og ikke AnsiString ? Hvorfor bruger du en FILE stream til at gemme med ? Og ikke en Stream enten TMemoryStream eller TFileStream ?

Jens B
Avatar billede alquesm Nybegynder
04. maj 2001 - 07:57 #3
Hehe, jeg bruger ikke ansistrings fordi at de funktioner som jeg bruger ikke havde det så godt med ansistrings (Da jeg prøvede). Og jeg bruger de funktioner som jeg gør fordi at jeg ikke har arbejdet med filer så meget før, og derfor ikke kender til nogle bedre funktioner. Men løsningen på mit problem er nok blot at omskrive min buggede kode til nogle smartere funktioner...

Men du har helt ret Borrisholt! :)
Jeg burde bruge AnsiStrings.
Avatar billede borrisholt Novice
04. maj 2001 - 07:59 #4
alquesm >> Hvordan har du det med Delphi kode ? Fordi jeg har ikke lige en CB her, men \"kun\" en Delphi .. Hvis du gav mig load og save funktionerne kunne jeg sikkert strikke noget Delphi kode sammen til dig ?

Jens B
Avatar billede ostus Nybegynder
04. maj 2001 - 09:03 #5
Det kunne være en hel del nemmere at svare på dit problem hvis du lagde TForm1 class-definitionen op!!!
Avatar billede mickni33 Nybegynder
04. maj 2001 - 13:16 #6
Jeg vil sige som borrisholt.
Hvis du bruger Builder så brug String (med stort S)
char [] kan indholde mange sjove ting når man skal gemme på fil da de operere på adresserne.
char [] er jo pointere og det må man ikke gemme på filer.....sagde min lærer engang..
String tager i mod alt, æder rup og stub
Avatar billede emileej Nybegynder
05. maj 2001 - 10:07 #7
Hvis det er så vitalt at bruge char, kan du jo bare bruge
dinStreng.c_str();
og
dinStreng=dinChar;

E-)mil
Avatar billede alquesm Nybegynder
05. maj 2001 - 18:25 #8
Jeg er taknemmelig for de svar og kommentarer som jeg har fået, men jeg har dog selv løst problemet. Jeg brugte FileOpen, FileWrite osv istedet for de ældre funktioner med streams. Programmet virker nu problemfrit, ja det vil sige bortset fra alle de andre problemet og bugs som jeg også prøver at få løst.

Igen tak for alle henvendelser, men jeg løste det jo selv, så jeg beholder desværre pointene. :(

Desuden bruger jeg stadig \"char csg[100]\" og det virker problemfrit! :)
Avatar billede alquesm Nybegynder
05. maj 2001 - 18:37 #9
Ok, eftersom pointene står stille lige nu, har jeg et andet spørgsmål som den første der kan svare mig på får de 15 point.

Jeg skal køre en bat fil, men execl kan jeg ikke få til at virke. Er der en af jer der kan sige mig hvilken funktion som jeg kan bruge?
Avatar billede borrisholt Novice
07. maj 2001 - 07:42 #10
Du skal bruge ShellExecute(). Den ligger i ShellAPI.hpp

Jens B
Avatar billede alquesm Nybegynder
11. maj 2001 - 23:23 #11
Hmm, ok, jeg har nu selv fundet ud af det. Jeg bruger SPAWNCL eller sådan noget, men anyway, eftersom borrisholt var den første....og eneste som svarede får han pointene anyway! Tak for jeres hjælp! :)
Avatar billede alquesm Nybegynder
11. maj 2001 - 23:24 #12
SORRY!!!!!!!!!!!!!!!!!!!!!
borrisholt, undskyld undskyld!!
jeg ramte den forkerte knap! DOH
Hvis du vil have pointene, så bare lige svar igen, så får du dem! :(

*Slår sig selv oven i hovedet*
Avatar billede borrisholt Novice
14. maj 2001 - 07:24 #13
Ok Du er tilgivet ...

Jens B :-)
Avatar billede alquesm Nybegynder
17. maj 2001 - 00:38 #14
Godt så! :)
Nu ramte jeg den rigtige knap!
Og igen, tak for hjælpen! :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester