<?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[[gelöst]Seltsames Verhalten von ifstream beim lesen+schreiben]]></title><description><![CDATA[<p>Hallo Welt,</p>
<p>heute ist mir folgendes Aufgefallen und ich wollte mal Fragen, ob das normal ist, oder ich etwas nicht bedacht habe. Folgendes Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;

using namespace std;

/*
test.dat sieht so aus:
\x00\x01\x02\x03\x04
*/

int main() {
  fstream fhandle(&quot;test.dat&quot;, fstream::in | fstream::out | fstream::binary);

  // Ich möchte nun aus dem Byte nach \x02 ein \x00 machen (also aus dem \x03)
  // Ich weiß, dass \x02 das dritte Byte ist - ergo kann ich hinseeken
  fhandle.seekp(2, ios_base::beg);
  // sicher bin ich mir aber nicht, lieber nachgucken...

  // TEIL A

  char tmp;
  fhandle.get(tmp);
  if(tmp!='\x02') { 
	 cout &lt;&lt; &quot;Die Datei ist beschädigt!!!&quot; &lt;&lt; endl;
	 return 1;
  }

  // ENDE TEIL A

  // TEIL B

  // Ok, also jetzt das updaten:
  fhandle.write(&quot;\x00&quot;, 1);
  if(fhandle.bad()) {
	 cout &lt;&lt; &quot;Und das ist der Beweis für den Fatalen I/O-Error!!!&quot; &lt;&lt; endl;
	 // Aber warum???
  }
  // ENDE TEIL B

  // Und zumachen...
  fhandle.close();
  return 0;
}
</code></pre>
<p>Das Programm funktioniert nicht, da es einen Schreibfehler gibt.<br />
Das Spannende: Wenn man TeilA weglässt funktionierts.<br />
Noch spannender: Wenn man zwischen TeilA und TeilB ein einfaches</p>
<pre><code class="language-cpp">fhandle.tellg();
</code></pre>
<p>setzt klappts auch.</p>
<p>Weißt jemand, wie das zu stande kommt?</p>
<p><em>Edit: Sorry dass das jetzt in AnsiC gelandet ist. Ist natürlich C++.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/242003/gelöst-seltsames-verhalten-von-ifstream-beim-lesen-schreiben</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 05:06:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/242003.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 May 2009 16:40:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst]Seltsames Verhalten von ifstream beim lesen+schreiben on Fri, 29 May 2009 10:00:33 GMT]]></title><description><![CDATA[<p>Hallo Welt,</p>
<p>heute ist mir folgendes Aufgefallen und ich wollte mal Fragen, ob das normal ist, oder ich etwas nicht bedacht habe. Folgendes Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;

using namespace std;

/*
test.dat sieht so aus:
\x00\x01\x02\x03\x04
*/

int main() {
  fstream fhandle(&quot;test.dat&quot;, fstream::in | fstream::out | fstream::binary);

  // Ich möchte nun aus dem Byte nach \x02 ein \x00 machen (also aus dem \x03)
  // Ich weiß, dass \x02 das dritte Byte ist - ergo kann ich hinseeken
  fhandle.seekp(2, ios_base::beg);
  // sicher bin ich mir aber nicht, lieber nachgucken...

  // TEIL A

  char tmp;
  fhandle.get(tmp);
  if(tmp!='\x02') { 
	 cout &lt;&lt; &quot;Die Datei ist beschädigt!!!&quot; &lt;&lt; endl;
	 return 1;
  }

  // ENDE TEIL A

  // TEIL B

  // Ok, also jetzt das updaten:
  fhandle.write(&quot;\x00&quot;, 1);
  if(fhandle.bad()) {
	 cout &lt;&lt; &quot;Und das ist der Beweis für den Fatalen I/O-Error!!!&quot; &lt;&lt; endl;
	 // Aber warum???
  }
  // ENDE TEIL B

  // Und zumachen...
  fhandle.close();
  return 0;
}
</code></pre>
<p>Das Programm funktioniert nicht, da es einen Schreibfehler gibt.<br />
Das Spannende: Wenn man TeilA weglässt funktionierts.<br />
Noch spannender: Wenn man zwischen TeilA und TeilB ein einfaches</p>
<pre><code class="language-cpp">fhandle.tellg();
</code></pre>
<p>setzt klappts auch.</p>
<p>Weißt jemand, wie das zu stande kommt?</p>
<p><em>Edit: Sorry dass das jetzt in AnsiC gelandet ist. Ist natürlich C++.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717417</guid><dc:creator><![CDATA[henede]]></dc:creator><pubDate>Fri, 29 May 2009 10:00:33 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Seltsames Verhalten von ifstream beim lesen+schreiben on Thu, 28 May 2009 17:09:08 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-2713.html" rel="nofollow">Nobuo T</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-10.html" rel="nofollow">ANSI C</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717428</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Thu, 28 May 2009 17:09:08 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Seltsames Verhalten von ifstream beim lesen+schreiben on Thu, 28 May 2009 19:55:03 GMT]]></title><description><![CDATA[<p>Also mein Debugger hat nichts zurückgewiesen und auch keinen Schreibfehler entdeckt.<br />
Wie sieht die Eingabedatei test.dat genau aus, denn wenn das nur ASCII-Zeichen sein sollen, dann funktioniert tmp!='\x02' natürlich nicht.<br />
Wenn das HEX-Werte sind, dann muss die Eingabedatei ja auch HEX-Werte enthalten, doch das habe ich nicht hinbekommen.<br />
Wenn das Bytes sind, dann musst du mir mal erklären wie man das so in eine Datei reinschreibt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /><br />
Mit fhandle.write(&quot;\x00&quot;, 1); schreibst du auf jeden Fall ACSII-Werte, weshalb das irgendwie kein Sinnn ergibt, da du ja Byte-Werte haben willst...<br />
Habe ich deinen Quelltext richtig verstanden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717527</guid><dc:creator><![CDATA[Parser]]></dc:creator><pubDate>Thu, 28 May 2009 19:55:03 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Seltsames Verhalten von ifstream beim lesen+schreiben on Thu, 28 May 2009 19:54:57 GMT]]></title><description><![CDATA[<p>mhh, seltsam.<br />
Liegts am compiler?</p>
<p>Mein gcc 4.3.3 hat damit eindeutig probleme...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717532</guid><dc:creator><![CDATA[henede]]></dc:creator><pubDate>Thu, 28 May 2009 19:54:57 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Seltsames Verhalten von ifstream beim lesen+schreiben on Thu, 28 May 2009 19:57:03 GMT]]></title><description><![CDATA[<p>Vielleicht könntest du ja mal deine Fehler-Anzeige hier posten...<br />
(das was debugger halt schreibt ; mit Zeilenangaben hoffe ich doch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717533</guid><dc:creator><![CDATA[Parser]]></dc:creator><pubDate>Thu, 28 May 2009 19:57:03 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Seltsames Verhalten von ifstream beim lesen+schreiben on Thu, 28 May 2009 20:58:18 GMT]]></title><description><![CDATA[<p>Parser schrieb:</p>
<blockquote>
<p>Wie sieht die Eingabedatei test.dat genau aus?</p>
</blockquote>
<p>Nur ein Beispiel um das Problem zu veranschaulichen - binär: du kannst sie dir bauen mit:</p>
<pre><code class="language-cpp">...
ofstream fhandle(&quot;test.dat&quot;, ios::out | ios::binary);
fhandle.write(&quot;\x00\x01\x02\x03\x04\x05&quot;,5);
fhandle.close()
...
</code></pre>
<p>es gibt keine wirkliche Fehlermeldung. Der Schreibbefehl wird nicht ausgeführt stattdessen ereignet sich irgendwo in den tiefen von &lt;fstream&gt; ein fataler I/O-Error.</p>
<p>wie gesagt: ab Zeile 34 ist (fhandle.bad() == true)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717545</guid><dc:creator><![CDATA[henede]]></dc:creator><pubDate>Thu, 28 May 2009 20:58:18 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Seltsames Verhalten von ifstream beim lesen+schreiben on Thu, 28 May 2009 20:43:18 GMT]]></title><description><![CDATA[<p>Bist du dir sicher, dass seekg und good das machen, was du willst?<br />
Ich kenn mich mit den Funktionen speziell jetzt nicht genau aus...<br />
Müssen es unbedingt Streams sein, mit denen du die Datei öffnest, ansonsten hätte ich noch eine andere Variante mit FILE &amp; fopen &amp; fread/fwrite...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717564</guid><dc:creator><![CDATA[Parser]]></dc:creator><pubDate>Thu, 28 May 2009 20:43:18 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Seltsames Verhalten von ifstream beim lesen+schreiben on Thu, 28 May 2009 21:03:13 GMT]]></title><description><![CDATA[<p>ähhm... hab mich vertan. Der Fehler ist nicht eof sonder es ist tatsächlich ein Fataler I/O-Error (Das ist mir ja noch nie gelungen ^^). Aber warum???<br />
<em>Update des Quelltextes aus Beitrag 1</em></p>
<p>Übrigens: Der borland C++ Compiler gibt auch die Fehlermeldung aus.</p>
<blockquote>
<p>Bist du dir sicher, dass seekg und good das machen, was du willst?</p>
</blockquote>
<p>Ja, bin ich.<br />
seekg versetzt den GET-Pointer (der mit dem PUT-Pointer immer identisch ist [siehe <a href="http://support.microsoft.com/kb/104634/en-us/" rel="nofollow">http://support.microsoft.com/kb/104634/en-us/</a>]</p>
<p>und good() bzw. bad() fragt ab, ob bei dem Schreib-/Lese Zugriff ein Fehler aufgetreten ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717574</guid><dc:creator><![CDATA[henede]]></dc:creator><pubDate>Thu, 28 May 2009 21:03:13 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Seltsames Verhalten von ifstream beim lesen+schreiben on Fri, 29 May 2009 09:08:46 GMT]]></title><description><![CDATA[<p>Ich habe noch herausgefunden, dass wenn man write vor bad/good herauskommentiert, dass dann das Ende der Datei noch nicht erreicht ist, also muss der Fehler bei write sein.<br />
Außerdem würde es mit einem ifstream zum Lesen und einem ofstream zum Schreiben funktionieren.<br />
Dann wäre die seek-Funktion seekp(...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717745</guid><dc:creator><![CDATA[Parser]]></dc:creator><pubDate>Fri, 29 May 2009 09:08:46 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Seltsames Verhalten von ifstream beim lesen+schreiben on Fri, 29 May 2009 09:41:53 GMT]]></title><description><![CDATA[<p>Hatten wir vor einiger Zeit schon mal:<br />
Wenn man den selben Stream für Eingabe und Ausgabe benutzt, so muss folgendes beachtet werden:<br />
Eine Ausgabe darf nicht direkt einer Eingabe folgen. Vorher muss entwerder die Ausgabe mit fflush erzwungen werden, oder ein Aufruf einer der Positionierungsfunktionen erfolgen (das hast Du ja auch schon festgestellt).<br />
Soll eine Eingabe auf eine Ausgabe folgen, so muss ebenfalls erst eine der Positionierungsfunktionen aufgerufen werden.<br />
Das steht im C++ Standard, wo ncoh ein Verweis auf den C-Standard enthalten ist, in dem dann das genaue Verhalten beschrieben wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717772</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 29 May 2009 09:41:53 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Seltsames Verhalten von ifstream beim lesen+schreiben on Fri, 29 May 2009 10:00:05 GMT]]></title><description><![CDATA[<p>und schon wieder was dazugelernt, danke <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/1717790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717790</guid><dc:creator><![CDATA[henede]]></dc:creator><pubDate>Fri, 29 May 2009 10:00:05 GMT</pubDate></item></channel></rss>