<?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[Kleines Problem mit fstream]]></title><description><![CDATA[<p>Ich teste gerade einige sachen mit den fstreams dabei bin ich auf ein sehr merkwürdiges Problem gestoßen.</p>
<p>Hier erstmal mein Versuchsaufbau</p>
<pre><code class="language-cpp">fstream file2;
file2.open(&quot;app.txt&quot;,ios::out|ios::in|ios::binary);
int i2=0;
int i=12345;
file2.read((char*)&amp;i2,4);
cout&lt;&lt;i2&lt;&lt;endl;
file2.write((char*)&amp;i,4);
file2.close();
</code></pre>
<p>bei app.txt handelt es sich um eine Datei ind er 2 int hintereinander stehen.</p>
<p>Mein Problem ist nun folgendes, nehme ich obigen Versuchsaufbau solte ja die 1. Zahl eigentlich ausgelesen werden und die 2. durch den anderen int wert überschrieben werden, das passiert aber nciht, die datei bleibt unverändert, der schreibbefehl wird ignoriert. Wenn ich die Reihenfolge von read und write evrtausche wird das 1. int überschrieben, das 2. wird aber auch verändert. Was mache ich hier falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/239322/kleines-problem-mit-fstream</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 13:15:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/239322.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 22 Apr 2009 00:58:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kleines Problem mit fstream on Wed, 22 Apr 2009 00:59:05 GMT]]></title><description><![CDATA[<p>Ich teste gerade einige sachen mit den fstreams dabei bin ich auf ein sehr merkwürdiges Problem gestoßen.</p>
<p>Hier erstmal mein Versuchsaufbau</p>
<pre><code class="language-cpp">fstream file2;
file2.open(&quot;app.txt&quot;,ios::out|ios::in|ios::binary);
int i2=0;
int i=12345;
file2.read((char*)&amp;i2,4);
cout&lt;&lt;i2&lt;&lt;endl;
file2.write((char*)&amp;i,4);
file2.close();
</code></pre>
<p>bei app.txt handelt es sich um eine Datei ind er 2 int hintereinander stehen.</p>
<p>Mein Problem ist nun folgendes, nehme ich obigen Versuchsaufbau solte ja die 1. Zahl eigentlich ausgelesen werden und die 2. durch den anderen int wert überschrieben werden, das passiert aber nciht, die datei bleibt unverändert, der schreibbefehl wird ignoriert. Wenn ich die Reihenfolge von read und write evrtausche wird das 1. int überschrieben, das 2. wird aber auch verändert. Was mache ich hier falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699466</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Wed, 22 Apr 2009 00:59:05 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Problem mit fstream on Wed, 22 Apr 2009 05:45:35 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Schau mal ob vor dem write-Aufruf eins der Error-Flags gesetzt ist (EOF, ...) weil wenn ja dann kann er keine Daten mehr schreiben.</p>
<p>Mfg Marco</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699490</guid><dc:creator><![CDATA[Marc-O]]></dc:creator><pubDate>Wed, 22 Apr 2009 05:45:35 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Problem mit fstream on Wed, 22 Apr 2009 09:07:47 GMT]]></title><description><![CDATA[<p>Xebov schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Gelichzeitige IO über den selben Stream ist etwas komplizierter, als wenn man es über zwei Streams macht.<br />
Folgende Regeln helfen:</p>
<ul>
<li>Will man nach einer Schreiboperation lesen, so sollte man den Stream flushen ( <code>seekg()</code> auf die gewünschte Position flusht implizit), damit der Puffer in einem sauberen Zustand ist.</li>
<li>Will man nach einer Leseoperation schreiben, so sollte man den Schreibzeiger mittels <code>seekp</code> auf die gewünschte Schreibposition setzen.</li>
</ul>
<p>Genauere Begründungen finden sich im C++ Standard und im C-Standard:<br />
<strong>ISO/IEC 14882:2003</strong> 27.8.1.3 § 2 sagt, dass ein <code>std::fstream</code> im Modus <code>binary|in|out</code> gleichwertig einem C-Stream ( <code>fopen</code> ) im Modus <code>&quot;r+b&quot;</code> ist.</p>
<p>ISO/IEC 9899:1999 (leider nur C99, sollte aber gleich C89 sein) schrieb:</p>
<blockquote>
<p>When a ﬁle is opened with update mode ('+' as the second or third character in the<br />
above list of mode argument values), both input and output may be performed on the<br />
associated stream. However, output shall not be directly followed by input without an<br />
intervening call to the fflush function or to a ﬁle positioning function (fseek,<br />
fsetpos,or rewind), and input shall not be directly followed by output without an<br />
intervening call to a ﬁle positioning function, unless the input operation encounters end-<br />
of-ﬁle. Opening (or creating) a text ﬁle with update mode may instead open (or create) a<br />
binary stream in some implementations</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1699561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699561</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 22 Apr 2009 09:07:47 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Problem mit fstream on Wed, 22 Apr 2009 12:23:49 GMT]]></title><description><![CDATA[<p>Danke, habs passend Umgebaut und es funktioniert.</p>
<p>Kleine Frage noch am Rande, lohtn es sich wenn man nur lesen oder schreiben will auf if und ifstream zurückzugreifen oder ist es auch ok generell nur fstream zu nehmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699648</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Wed, 22 Apr 2009 12:23:49 GMT</pubDate></item></channel></rss>