Toon posts:

[C++] schrijven naar tekst file

Pagina: 1
Acties:

Verwijderd

Topicstarter
Er gaat iets niet goed bij het schrijven naar een log file. Ik roep de volgende functie aan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void SchrijfLogBestand(AnsiString cfgFile, AnsiString Actie)
{
  struct mystruct
  {
    AnsiString ProcesNaam, DeActie, TijdStamp;
  }logRegel;

   FILE *logBestand;

   logRegel.ProcesNaam = cfgFile;
   logRegel.DeActie = Actie;
   logRegel.TijdStamp = Now();

   if ((logBestand = fopen("TEST.log", "wb")) == NULL) 
                         // open file TEST.log
   {
     MessageBox(0, "Fout bij het openen van het logbestand.", 
            "Error", MB_OK);
   }
   // write struct logRegel to file
   fwrite(&logRegel, sizeof(logRegel), 1, logBestand); 
   fclose(logBestand); // close file
}

Zo zou normaal gesproken toch ge gegevens in mijn struct naar TEST.log geschreven moeten worden he.
Maar als ik TEST.log open staat er dit in:
code:
1
××湰×

Waar gaat het mis? En wat gaat er mis?

Edit by whoami: code - tags zijn O+

  • PROnline
  • Registratie: Maart 2000
  • Laatst online: 11:43
het ziet er naaruit dat ie pointers in je logfile zet.
Op die geheugenplaatsen staat/stond wat je eigenlijk in je logfile had willen hebben.

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:59
Volgens mij schrijf je de adressen van de variablen weg ipv de inhoud.

Hoe ziet de prototype er uit van die fwrite functie?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Op donderdag 13 juni 2002 13:07 schreef whoami het volgende:
Hoe ziet de prototype er uit van die fwrite functie?
size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);

Description

Writes to a stream.

fwrite appends n items of data each of length size bytes to the given output file. The data written begins at ptr. The total number of bytes written is (n x size). ptr in the declarations is a pointer to any object.

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Je schrijft het adres van de struct naar een file :?
Je zou iets van logRegel.DeActie ofzo moeten wegschrijven... maar volgens mij zal fwrite niet een ansistring pakken (tenzij je deze kunt casten naar een char *D

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

Topicstarter
Op donderdag 13 juni 2002 13:14 schreef _Mo_ het volgende:
Je zou iets van logRegel.DeActie ofzo moeten wegschrijven.
Dat lukt wel, maar ik wil alle 3 de gegevens uit de struct in 1 fwrite wegschrijven.

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:59
't is zeker mogelijk hoor, maar ik heb hier nu ff geen C++ compiler staan. 'k Heb het in een ver verleden zelf nog gedaan, maar 'k weet niet zo direct meer hoe.
Zal thuis eens in m'n boek kijken.

https://fgheysels.github.io/


Verwijderd

Op donderdag 13 juni 2002 13:28 schreef knien001 het volgende:
Dat lukt wel, maar ik wil alle 3 de gegevens uit de struct in 1 fwrite wegschrijven.
fprintf(FILE *blaat, const char *format, ...);

Suc6. :Y).

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:59
Probeer het eens zo:
code:
1
frwrite ( (char*)&logRegel, sizeof(logRegel), 1, bestand);

https://fgheysels.github.io/


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 12:47
Eerst een paar opmerkingen met betrekking tot programmeerstijl:

1. Anonieme structs zijn toegestaan. Als je nooit meer aan je struct hoeft te refereren, hoef je 'm dus ook geen naam te geven. Als dat wel moet, kies dan een zinnige naam; 'mystruct' is dus nooit goed.

2. Gebruik geen lidwoorden in identifiers.

3. Wees consistent; als je dan toch DeActie schrijft, schrijf dan ook DeProcesNaam. TijdStamp kan natuurlijk ook niet, noem 'm dan TimeStamp of TijdStempel. Hetzelfde geldt voor cfgFile versus Actie (of allebei met een hoofdletter, of allebei niet) en cfgFile versus logBestand; ofwel file, ofwel bestand.

Verder ligt 't probleem waarschijnlijk bij de represenatie van je AnsiString (welke ik ueberhaupt niet ken). Het is misschien geen slecht idee om hier gewoon een char-array van te maken of een char-pointer (in welk geval je nu niet kan fwriten zoals je nu doet).

Aangezien je aangeeft een C++ programma te schrijven, zou je natuurlijk beter helemaal af kunnen stappen van de huidige (C) manier van werken met bestanden en gegevens. Het is netter om (nogmaals ten behoeve van de consequentie consistentie) in C++ programma's gebruik te maken van C++ werkwijzen. In dit geval streams dus.

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:59
Op donderdag 13 juni 2002 20:53 schreef Soultaker het volgende:
Aangezien je aangeeft een C++ programma te schrijven, zou je natuurlijk beter helemaal af kunnen stappen van de huidige (C) manier van werken met bestanden en gegevens. Het is netter om (nogmaals ten behoeve van de consequentie) in C++ programma's gebruik te maken van C++ werkwijzen. In dit geval streams dus.
Inderdaad, kijk dus eens naar de classes fstream, ifstream en ofstream.

https://fgheysels.github.io/

Pagina: 1