Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

29.07.2009, 19:57

Problem mit Logbuch Datei

Hi Leute,
Ich hab n neues Problem. Ich will ein Logbuch in Form einer txt schreiben(es hat nichts mit der KonsolenLib zu tun). Dies ist die Funktion zum schreiben:

C-/C++-Quelltext

1
2
3
4
5
void DLL WriteToLog(string pcFormat)
{
    ofstream Log("Log.txt",ios::binary);
    Log.write((char*)&pcFormat,sizeof(pcFormat));
}


Ich hab jetzt mal n Test gemacht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
#include "dll.h"
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,char*pcCmdLine,int nShowCmd)
{
    WriteToLog("Logbuch");
    return 0;
} 


und das kommt dabei raus:

Quellcode

1
,þ Logbuch °5             


Ich verstehe nicht was ich da falsch machen soll.
Der Debugger gibt auch keine Fehler aus.
Wisst ihr was ich da falsch mach?

mfg

Fabian
Metal ist keine Musik sondern eine Religion.

2

29.07.2009, 19:59

Weil du ios::binary verwendest?
fka tm

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

3

29.07.2009, 20:01

und sizeof(pcFormat) dir nicht die länge des strings zurück gibt sondern die länge des std::string objekts, und du durch den cast dein std::string objekt binär in die Datei schreibst.

Wenn du Text schreiben willst warum nutzt du dann nicht einfach log << pcFormat; und das ohne ios::binary.

4

29.07.2009, 20:02

nein des wars nicht.
Metal ist keine Musik sondern eine Religion.

5

29.07.2009, 20:12

Oh, übersehen, dass du string verwendest.
Müsste's dann nicht heißen pcFormat.c_str() ?

Apropos heißen: Mir ist auch heiß...
Glaube, sollte mich mal mit was anderem beschäftigen bei meiner Dampfbirne. :?
fka tm

6

29.07.2009, 20:22

es funktioniert xardias. Das ergebniss ist diesmal Richtig. Also:

Quellcode

1
Logbuch


@TrikkieMikkie
c_str() ist doch ein objekt von string.
Metal ist keine Musik sondern eine Religion.

7

29.07.2009, 20:40

Hey ich hab noch ein Problem:
Wenn ich jetzt z.B. eingeb:

C-/C++-Quelltext

1
2
WriteToLog("Hallo");
WriteToLog("Tschüss");


dann über schreibt der String Tschüss das Hallo. Wie kann ich das verhindern?
hab schon das probiert:

C-/C++-Quelltext

1
2
WriteToLog("Hallo\n");
WriteToLog("Tschüss");
Metal ist keine Musik sondern eine Religion.

8

29.07.2009, 20:51

http://www.willemer.de/informatik/cpp/fileop.htm

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

9

29.07.2009, 21:11

Zitat von »"Q1"«

C-/C++-Quelltext

1
ostream& write ( const char* s , streamsize n );


Write block of data

Writes the block of data pointed by s, with a size of n characters, into the output buffer. The characters are written sequentially until n have been written.

This is an unformatted output function and what is written is not necessarily a c-string, therefore any null-character found in the array s is copied to the destination and does not end the writing process.




Es ist nicht schlau das Logbuch ständig zu öffnen (ostream) ohne zu schließen (close). Nur weil du die Methode write benutzt, bedeutet das nicht, dass in die Datei sogleich etwas hineingeschrieben wird. Write füllt nur den Ausgabepuffer mit Daten!

Du musst den Stream schließen (close()), oder die Methode flush() aufrufen. Achso, und natürlich das IOS::APP (für append, anhängen) benutzen

in etwa so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
void DLL WriteToLog(std::string pcFormat)
{
    std::ofstream Log;
    
    Log.open("Log.txt", std::ios::app);
    
    Log.write(pcFormat.c_str(),pcFormat.size());

    Log.close();
}



Zitat

@TrikkieMikkie
c_str() ist doch ein objekt von string.

WTF? c_str() ist eine Methode der Klasse std::string. Diese Methode gibt dir einen mit 0 - terminierenden String. (Q2)

Q1: http://www.willemer.de/informatik/cpp/fileop.htm
Q2: http://www.cplusplus.com/reference/string/string/c_str/

10

29.07.2009, 22:03

Koschka

Dachte schon, ich hätte einen Sonnenstich... 8) :)
fka tm

Werbeanzeige