<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Ein Bug in GetLastError() in Verbindung mit ofstream?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich öffne eine Datei zu schreiben, und frage danach mit GetLastError() einen eventuellen Fehler ab. Die Datei soll wenn es sie noch nicht gibt neu engelegt werden, sonst werden die Daten an das Ende der Datei angehängt. Der eventuelle Fehler wird dann mit FormatMessage() dem Benutzer angezeigt.<br />
Das mache ich im Prinzip so:</p>
<pre><code class="language-cpp">ofstream Reportfile;

Reportfile.open(&quot;Dateiname&quot;, ios::app | fmShareExclusive);
LastErrCode = GetLastError();
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, NULL, LastErrCode, 0, msg, 256, NULL );
</code></pre>
<p>GetLastError gibt hier als Fehlercode 183 (0xB7) zurück. Was letztendlich durch Formatmessage in <em>&quot;Eine Datei kann nicht erstellt werden wenn sie bereits vorhanden ist.&quot;</em> angezeigt wird. Der nachfolgende Schreibvorgang wird korrekt durchgeführt.</p>
<p>Ob ich die Datei mit ios::app oder ios::ate öffne, oder ob ich das fmShareExclusive benutze oder nicht macht keinen Unterschied.</p>
<p>Da open() mit ios::app problemlos in beiden Fällen (neue Datei bzw. Daten anhängen) funktioniert, erschliesst sich mir der Sinn des Fehlers in GetLastError nicht ganz. Meiner Meinung dürfte hier kein Fehler angezeigt werden, da ja die letzte Operation = &quot;Datei zum Daten anhängen öffnen&quot; korrekt ausgeführt werden kann.</p>
<p>Ist das jetzt tatsächlich ein Bug in C++, oder wende ich das nur falsch an? Ich könnte ja den Fehler 0xB7 einfach ignorieren, aber schön ist das ja nicht.</p>
<p>Grüße,<br />
Jochen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/149487/ein-bug-in-getlasterror-in-verbindung-mit-ofstream</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 06:38:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/149487.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Jun 2006 13:50:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ein Bug in GetLastError() in Verbindung mit ofstream? on Tue, 06 Jun 2006 13:50:16 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich öffne eine Datei zu schreiben, und frage danach mit GetLastError() einen eventuellen Fehler ab. Die Datei soll wenn es sie noch nicht gibt neu engelegt werden, sonst werden die Daten an das Ende der Datei angehängt. Der eventuelle Fehler wird dann mit FormatMessage() dem Benutzer angezeigt.<br />
Das mache ich im Prinzip so:</p>
<pre><code class="language-cpp">ofstream Reportfile;

Reportfile.open(&quot;Dateiname&quot;, ios::app | fmShareExclusive);
LastErrCode = GetLastError();
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, NULL, LastErrCode, 0, msg, 256, NULL );
</code></pre>
<p>GetLastError gibt hier als Fehlercode 183 (0xB7) zurück. Was letztendlich durch Formatmessage in <em>&quot;Eine Datei kann nicht erstellt werden wenn sie bereits vorhanden ist.&quot;</em> angezeigt wird. Der nachfolgende Schreibvorgang wird korrekt durchgeführt.</p>
<p>Ob ich die Datei mit ios::app oder ios::ate öffne, oder ob ich das fmShareExclusive benutze oder nicht macht keinen Unterschied.</p>
<p>Da open() mit ios::app problemlos in beiden Fällen (neue Datei bzw. Daten anhängen) funktioniert, erschliesst sich mir der Sinn des Fehlers in GetLastError nicht ganz. Meiner Meinung dürfte hier kein Fehler angezeigt werden, da ja die letzte Operation = &quot;Datei zum Daten anhängen öffnen&quot; korrekt ausgeführt werden kann.</p>
<p>Ist das jetzt tatsächlich ein Bug in C++, oder wende ich das nur falsch an? Ich könnte ja den Fehler 0xB7 einfach ignorieren, aber schön ist das ja nicht.</p>
<p>Grüße,<br />
Jochen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1072534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1072534</guid><dc:creator><![CDATA[JoKo]]></dc:creator><pubDate>Tue, 06 Jun 2006 13:50:16 GMT</pubDate></item><item><title><![CDATA[Reply to Ein Bug in GetLastError() in Verbindung mit ofstream? on Tue, 06 Jun 2006 13:53:08 GMT]]></title><description><![CDATA[<p>Ich glaube ehrlichgesagt nicht, dass GetLastError() (WinAPI) und ofstream (Standard-C++) sonderlich gut zusammenarbeiten.</p>
<p>BTW:<br />
Woher zum Geier kommt fmShareExclusive und was hat das bei den ios-Flags zu suchen? Bzw, wo steht dass man proprietäre Flags mit denen der Standardbibliothek mischen sollte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1072539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1072539</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 06 Jun 2006 13:53:08 GMT</pubDate></item><item><title><![CDATA[Reply to Ein Bug in GetLastError() in Verbindung mit ofstream? on Tue, 06 Jun 2006 14:14:21 GMT]]></title><description><![CDATA[<p>fmShareExclusive kenn ich nur aus der TFileStream-Klasse von Borland. Wie das hier in ofstream reinpassen soll weiß ich auch nicht.<br />
Was für ein Compiler ist das denn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1072554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1072554</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 06 Jun 2006 14:14:21 GMT</pubDate></item><item><title><![CDATA[Reply to Ein Bug in GetLastError() in Verbindung mit ofstream? on Tue, 06 Jun 2006 14:22:51 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>fmShareExclusive kenn ich nur aus der TFileStream-Klasse von Borland. Wie das hier in ofstream reinpassen soll weiß ich auch nicht.<br />
Was für ein Compiler ist das denn?</p>
</blockquote>
<p>Borland Builder 6.0</p>
<p>Das fmShareExclusive funktioniert auf jeden Fall damit. Genauso wie GetLastError() mit anderen Fehlern funktioniert. Deshalb wundert mich es, dass ein Fehler angezeigt wird, wo keiner ist.</p>
<p>Grüße,<br />
Jochen</p>
<p>Edit: wenn wir jemand was passenderes als das fmShareExclusive mit gleicher Funktionalität hat, nur her damit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1072559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1072559</guid><dc:creator><![CDATA[JoKo]]></dc:creator><pubDate>Tue, 06 Jun 2006 14:22:51 GMT</pubDate></item><item><title><![CDATA[Reply to Ein Bug in GetLastError() in Verbindung mit ofstream? on Tue, 06 Jun 2006 14:34:09 GMT]]></title><description><![CDATA[<p>Das es compiliert wird, bedeutet nicht, das es auch so funktioniert. Der Compiler wird wohl die beiden Werte einfach als int (oder ähnlich) interpretieren und dann per logisches oder verknüpfen. Keine Ahnung was da raus kommt aber mit Sicherheit nicht das was du willst. GetLastError hat hier auch nichts zu suchen. Der Fehlerwert wird hier weder von ofstream noch von TFileStream gesetzt.<br />
Was willst du eigentlich erreichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1072568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1072568</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 06 Jun 2006 14:34:09 GMT</pubDate></item><item><title><![CDATA[Reply to Ein Bug in GetLastError() in Verbindung mit ofstream? on Tue, 06 Jun 2006 14:41:34 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Was willst du eigentlich erreichen?</p>
</blockquote>
<p>Ich will:<br />
- wenn ich die Datei geöffnet habe, darf kein anderer etwas mit dieser Datei anfangen können. (deshalb das fmSharedExclusive, was wie gesagt bei mir auch funktioniert)<br />
- Wenn die Datei nicht geöffnet werden kann, z.B. weil sie gerade von jemand anders benutzt wird, oder wenn sie generell schreibgeschützt ist, eine Meldung im Klartext für den Benutzer. Ich habe in der Hilfe zu fstream absolut keinen Hinweis gefunden, wie das damit gehen soll, nur den Hinweis auf badbit, goodbit usw.</p>
<p>Jochen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1072580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1072580</guid><dc:creator><![CDATA[JoKo]]></dc:creator><pubDate>Tue, 06 Jun 2006 14:41:34 GMT</pubDate></item><item><title><![CDATA[Reply to Ein Bug in GetLastError() in Verbindung mit ofstream? on Tue, 06 Jun 2006 14:47:59 GMT]]></title><description><![CDATA[<p>GetLastError funktioniert schon, _nur_ bezieht sich GetLastError() auf Fehler die beim Aufrufen von Winapi-Funktionen passiert und ist nur so lange gültig wie keine andere aufgerufen wurde. Wieviele Winapi-Funktionen ofstream intern aufruft kannst du nicht wissen und folglich kannst du dich auf GetLastError nicht verlassen.<br />
Ob die Datei erstellt werden konnte, lässt sich mit good() feststellen.<br />
=&gt; ofstream out(&quot;bla&quot;); if(!out){ /*error handling*/ }</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1072587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1072587</guid><dc:creator><![CDATA[Dr. Prof]]></dc:creator><pubDate>Tue, 06 Jun 2006 14:47:59 GMT</pubDate></item><item><title><![CDATA[Reply to Ein Bug in GetLastError() in Verbindung mit ofstream? on Tue, 06 Jun 2006 14:50:08 GMT]]></title><description><![CDATA[<p>Ergänzung:<br />
Wenn du sowas spezifisches haben möchtest, dann verwende direkt die Winapi-Funktionen für Dateihandling. Sowas geht weit über die Möglichkeiten von den file-streams hinaus (du kannst dir aber leicht einen eigenen file-stream schreiben der sowas beherrscht).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1072589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1072589</guid><dc:creator><![CDATA[Dr. Prof]]></dc:creator><pubDate>Tue, 06 Jun 2006 14:50:08 GMT</pubDate></item><item><title><![CDATA[Reply to Ein Bug in GetLastError() in Verbindung mit ofstream? on Tue, 06 Jun 2006 15:03:50 GMT]]></title><description><![CDATA[<p>Ich hab grad mal in den Sources von fstream des BCB6 nachgeschaut. Hier wird anscheinend <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/createfile.asp" rel="nofollow">CreateFile</a> aus der WinAPI verwendet (bei 32Bit-Windows und ohne CygWin). In diesem Fall wäre es vernünftig eben diese Funktion zu verwenden oder eben BCB-spezifisch TFileStream.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1072597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1072597</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 06 Jun 2006 15:03:50 GMT</pubDate></item><item><title><![CDATA[Reply to Ein Bug in GetLastError() in Verbindung mit ofstream? on Tue, 06 Jun 2006 15:10:18 GMT]]></title><description><![CDATA[<p>Danke, ich sehe mir das mal an.</p>
<p>Jochen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1072601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1072601</guid><dc:creator><![CDATA[JoKo]]></dc:creator><pubDate>Tue, 06 Jun 2006 15:10:18 GMT</pubDate></item></channel></rss>