<?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[fstream liest mir ein byte zu viel]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe ein kleines Problem mit fstream in meinem C++ Programm.<br />
Das Programm selbst tut nicht viel großartiges, es liest eine/zwei Datei/en byteweiße ein und gibt sie wieder als Datei aus.</p>
<p>Code auszug</p>
<pre><code>char apath[100], bpath[100], cpath[100];
...
ifstream a; ifstream b; ofstream c;
a.open(apath, ios::in  | ios::binary);
b.open(bpath, ios::in  | ios::binary);
c.open(cpath, ios::out | ios::binary);
...
a.close(); b.close(); c.close();
</code></pre>
<p>Aber nun passiert immer folgendes, die Datei auch wenn sie nicht veraendert wieder gespeichert wird, wird immer um ein Byte groesser, am Ende haengt ein sinnloses Byte drinnen, welches mit dem vorherigen Identisch ist. Ich verwende hier die .read(&amp;c,1); und .write(&amp;c,1); Methoden, aber egal was ich mache es passiert immer! Am Code selber liegt das Problem sicher nicht, hat jemand vlt einen Vorschlag wo mein Fehler liegen koennte?</p>
<p>Danke und LG Harald</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/190533/fstream-liest-mir-ein-byte-zu-viel</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 17:01:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/190533.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 23 Aug 2007 19:15:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to fstream liest mir ein byte zu viel on Thu, 23 Aug 2007 19:15:17 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe ein kleines Problem mit fstream in meinem C++ Programm.<br />
Das Programm selbst tut nicht viel großartiges, es liest eine/zwei Datei/en byteweiße ein und gibt sie wieder als Datei aus.</p>
<p>Code auszug</p>
<pre><code>char apath[100], bpath[100], cpath[100];
...
ifstream a; ifstream b; ofstream c;
a.open(apath, ios::in  | ios::binary);
b.open(bpath, ios::in  | ios::binary);
c.open(cpath, ios::out | ios::binary);
...
a.close(); b.close(); c.close();
</code></pre>
<p>Aber nun passiert immer folgendes, die Datei auch wenn sie nicht veraendert wieder gespeichert wird, wird immer um ein Byte groesser, am Ende haengt ein sinnloses Byte drinnen, welches mit dem vorherigen Identisch ist. Ich verwende hier die .read(&amp;c,1); und .write(&amp;c,1); Methoden, aber egal was ich mache es passiert immer! Am Code selber liegt das Problem sicher nicht, hat jemand vlt einen Vorschlag wo mein Fehler liegen koennte?</p>
<p>Danke und LG Harald</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350687</guid><dc:creator><![CDATA[HE]]></dc:creator><pubDate>Thu, 23 Aug 2007 19:15:17 GMT</pubDate></item><item><title><![CDATA[Reply to fstream liest mir ein byte zu viel on Thu, 23 Aug 2007 19:17:35 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">while (!a.eof()) ...
</code></pre>
<p>vielleicht? Ich meine das war der Übeltäter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350689</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Thu, 23 Aug 2007 19:17:35 GMT</pubDate></item><item><title><![CDATA[Reply to fstream liest mir ein byte zu viel on Thu, 23 Aug 2007 19:21:53 GMT]]></title><description><![CDATA[<pre><code>char ch;
while (!a.eof()) { a.read(&amp;ch,1); c.write(&amp;ch,1); }
</code></pre>
<p>Meinst du daran liegt der Fehler? Ein fail() oder anderer Fehler tritt sicher nicht aus, die eof() Pruefung reicht in meinem Fall.<br />
Ich habe auch eine andere Moeglichkeit versucht aber das gleiche Problem wie vorher</p>
<pre><code>char ch;
for (int i=0; i&lt;dateilaenge; i++) { a.read(&amp;ch,1); c.write(&amp;ch,1); }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1350693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350693</guid><dc:creator><![CDATA[HE]]></dc:creator><pubDate>Thu, 23 Aug 2007 19:21:53 GMT</pubDate></item><item><title><![CDATA[Reply to fstream liest mir ein byte zu viel on Thu, 23 Aug 2007 21:24:48 GMT]]></title><description><![CDATA[<p>Im ersten Fall ist die Schleifenbedingung falsch gewählt. Erst nach dem ersten erfolglosen a.read() wird a.eof() == true, nicht vorher:</p>
<pre><code class="language-cpp">while (!in.eof()) {
  in.read(&amp;c, 1);   // hier wird erst in.eof = true gesetzt!
  out.write(&amp;c, 1); // c enthaelt das letzte Zeichen, da kein neues gelesen wurde
}
</code></pre>
<p>In deinem zweiten Beispiel testest du vermutlich auf die falsche Dateigröße.<br />
Allerdings kannst du dir derartige Probleme leicht ersparen:</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;

using namespace std;

int main() {
  ifstream in(&quot;test.dat&quot;, ios::binary);
  ofstream out(&quot;Kopie von test.dat&quot;, ios::binary);

  out &lt;&lt; in.rdbuf();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1350758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350758</guid><dc:creator><![CDATA[2am]]></dc:creator><pubDate>Thu, 23 Aug 2007 21:24:48 GMT</pubDate></item><item><title><![CDATA[Reply to fstream liest mir ein byte zu viel on Fri, 24 Aug 2007 20:33:19 GMT]]></title><description><![CDATA[<p>Danke 2am</p>
<p>Oh was für ein dummer Fehler, ich dachte die eof()Prüfung schaut immer das nächste Byte an, nicht das aktuelle! Danke vielmals für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351470</guid><dc:creator><![CDATA[HE]]></dc:creator><pubDate>Fri, 24 Aug 2007 20:33:19 GMT</pubDate></item></channel></rss>