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

Samuel G.

Treue Seele

  • »Samuel G.« ist der Autor dieses Themas

Beiträge: 110

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

1

03.11.2005, 13:28

fstream::close schägt fehl - weiß nicht ein noch aus!

Hallo! :) :) :)


Also.
Ich öffne einen fstream,
schreibe was hinein (bis dahin alles fstream::good),
schließe mit fstream::close
und dann ist fstream::fail()==true (aber kein anderes fehlerbit gesetzt), und die Datei ist leer.

Bischen Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
fstream* m_pFStream=new fstream();
m_pFStream->open(*m_pStringPath,ios::out);

m_pFStream->write(String.GetACString(),String.GetUILength());
m_pFStream->put ('\n');
m_pFStream->close();
if(m_pFStream->fail())
{
  if(m_pFStream->rdstate()&fstream::badbit)
  {
    sgPrintError("","fstream::badbit!");
  }
  if(m_pFStream->rdstate()&ios_base::eofbit)
  {
    sgPrintError("","fstream::eofbit!");
  }
  if(m_pFStream->rdstate()&ios_base::failbit)
  {
    sgPrintError("","fstream::failbit!");
  }
  if(m_pFStream->rdstate()&ios_base::goodbit)
  {
    sgPrintError("","fstream::goodbit!");
  }
   sgPrintError("",SG_COULD_NOT_CLOSE);
  m_pFStream->clear();
}



Ich bin am verzweifeln. Ich habe keinen Schimmer, warum das Schließen der fstreams fehlschlägt!
Hilfe!
:crying: :crying: :crying:

Samuel G.
Quak

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

2

03.11.2005, 15:31

Ich würde lieber prüfen, ob open geklappt hat...

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

3

03.11.2005, 16:35

ja m_pIrgendwas sieht sehr verdächtig aus.

Samuel G.

Treue Seele

  • »Samuel G.« ist der Autor dieses Themas

Beiträge: 110

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

4

03.11.2005, 17:23

Beitrag

Ja nun, das ist doch bloß so ne art pseudo-code (ich kann hier nicht ganze Klassendefinitionen posten, das liest sich kein Mensch mer durch), natürlich prüfe ich auch, ob open und write klappt - das tut es. Das befremdliche ist ja auch, dass nur close fehlschlägt.
Quak

Samuel G.

Treue Seele

  • »Samuel G.« ist der Autor dieses Themas

Beiträge: 110

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

5

03.11.2005, 17:29

Beitrag

Weiß keiner, was das bedeutet, wenn das failbit nach dem closen gesetzt ist?
Kann man noch irgendwie genauere Infos kriegen, woran genau es scheitert?
In der den Doks steht nur, z.B.:

Zitat

ios_base::failbit a nonfatal error has occurred


Aber das bringt einem bei der Fehlersuche ja fast nix...
Quak

Anonymous

unregistriert

6

03.11.2005, 18:56

1. Tipp: Warum pointer?
2. Tipp: Guck dir mal genau an ob Open klappt, das mit deinen Pointern riecht mach Murks.
3. Tipp: Guck dir mal genau an was "fail" macht.

Samuel G.

Treue Seele

  • »Samuel G.« ist der Autor dieses Themas

Beiträge: 110

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

7

04.11.2005, 00:46

Beitrag

Hmm. Danke für die Tips.

Zitat

1. Tipp: Warum pointer?
2. Tipp: Guck dir mal genau an ob Open klappt, das mit deinen Pointern riecht mach Murks.
3. Tipp: Guck dir mal genau an was "fail" macht.


1. Warum nicht? Ich habe sicher keinen Pointer-Fehler, sondern ein Problem mit fstream

2. Ich habs noch mal genau überprüft: Alle aufgerufenen Methoden von fstream klappen, fstream::close ist die erste Methode, die fehlschlägt (ich kanns selber kaum glauben)

3. Hmm. Alle Infos die ich dazu fand waren nicht hilfreich. Da steht nirgends, was es bedeuted, wenn fail()==true ist, nachdem close aufgerufen wurde...


Hat nicht noch jemand ne Erfahrung mit fstream, die mir weiterhelfen könnte?
Quak

Anonymous

unregistriert

8

04.11.2005, 09:42

Samuel G.
1. Weil man für so einen Kram keine Pointer benutzt, wir sind nicht mehr in C-Zeiten! Oder magste es gefährlich zu leben?
2. Tja dann teste mal warum sie fehlschlägt (Debugger)
3. fail hat auch nichts damit zu tun ob das schließen fehlgeschlagen ist. fail ist für was anderes.

Tipp: lass den Quatsch mit close und benutz scopes, damit der Destruktor aufgerufen wird. Dazu lass diesen Unsinn mit den Pointern, brauchste nicht, ist Overhead und eine Schnappsidee.

Hat nicht noch jemand ne Erfahrung mit fstream, die mir weiterhelfen könnte?
Doch, ich ;)

Samuel G.

Treue Seele

  • »Samuel G.« ist der Autor dieses Themas

Beiträge: 110

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

9

04.11.2005, 15:59

Beitrag

Also, ich hab noch was rausgefunden: Es kommt scheinbar auf den Kontext an, aus dem ich die Funktionen aufrufe: Wenn ich den fstream in der DLL (in der die Kapselung von fstream ist) close, schlägts fehl, wenn ich ihn aus der aufrufenden Exe aufrufe, klappt alles. Hat das vielleicht damit zu tun, dass fstream ne Template-Klasse ist?
Quak

Anonymous

unregistriert

10

04.11.2005, 16:13

Samuel G.
Erfasst. Templates und DLL Exportierungen/Importierungen (vorallem Dynamisch) sind so wie das Weihwasser in der Kirche und der Teufel.

Interessant, von DLLs hast Du nichts gesagt.

Werbeanzeige