<?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[Problem bei gleichzeitigem Lesen und Schreiben in Binärdateien]]></title><description><![CDATA[<p>Hallo,<br />
ich bin neu hier und das ist mein erster Beitrag und ich hoffe,<br />
dass ich nicht irgendwo eine passende Antwort überlesen habe <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>
<p>Ich habe ein kleines Progrämmchen geschrieben, dass das gleichzeitige Lesen und Schreiben in einer Binärdatei demonstrieren soll.<br />
Es werden Zahlen in eine Binärdatei geschrieben und zur Kontrolle ausgegeben.<br />
Die Datei wird dann zum Lesen und Schreiben geöffnet, die Zahlen werden gelesen und bei geraden Zahlen wird der &quot;Dateizeiger&quot; zurückgesetzt und die Zahl mit einer um Eins größeren Zahl überschrieben.<br />
Danach sollten in der Datei nur noch ungerade Zahlen sein.<br />
Problem: Nach dem die erste gerade Zahl ersetzt wurde, bricht das Programm ab und ich sehe einfach nicht warum. Nach der write Anweisung ist der Stream auf eof.<br />
Wenn ich nach der write-Anweisung die (eigentlich sinnlose??) Anweisung<br />
ausein.seekp(0,ios::cur); setze, die doch wohl bedeutet &quot;bleib wo du bist&quot;, läuft das Programm problemlos.<br />
Kann mir jemand dieses Verhalten erklären oder sieht, wo mein Denkfehler liegt?</p>
<p>Im folgenden Quelltext habe ich die Kontrollen, ob die Streams geöffnet werden konnten und weggelassen. Ich benutze Code::Blocks 10.05 mit GNU Compiler unter Win 7</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;cstdlib&gt;
using namespace std;
int main()
{
   int zahl=0;
   ofstream aus;
   ifstream ein;
   fstream ausein;
   aus.open(&quot;zahlen.dat&quot;,ios::binary);//---Zahlen in Datei schreiben
   for(int i=0;i&lt;10;i++)
      aus.write((char*)&amp;i,sizeof(int));
   aus.close();

   ein.open(&quot;zahlen.dat&quot;,ios::binary);//-- Zahlen aus Datei ausgeben
   while( ein.read((char*)&amp;zahl,sizeof(int)) )cout&lt;&lt;zahl&lt;&lt;&quot;,&quot;;
   ein.close();

   ausein.open(&quot;zahlen.dat&quot;,ios::in|ios::out|ios::binary);//Lesen und Schreiben
   while(ausein.read((char*)&amp;zahl,sizeof(int)))
   {
      if(zahl%2==0) //wenn gerade
      {
         zahl++;  // dann jetzt ungerade
         ausein.seekp((-1*(ios::pos_type)sizeof(int)),ios::cur); //zurueck gehen
         ausein.write((char*)&amp;zahl,sizeof(int)); //Zahl ueberschreiben
         //ausein.seekp(0,ios::cur); //damit funktioniert es ?????
      }
   }
   ausein.close();
   cout&lt;&lt;endl&lt;&lt;&quot;nach bearbeiten: &quot;&lt;&lt;endl; //Kontrollausgabe ---
   ein.clear();
   ein.open(&quot;zahlen.dat&quot;,ios::binary);
   while( ein.read((char*)&amp;zahl,sizeof(int)) )cout&lt;&lt;zahl&lt;&lt;&quot;,&quot;;
      ein.close();

   system(&quot;Pause&quot;);
   return(0);
}
</code></pre>
<p>Schon mal danke für die Mühe<br />
Gruß<br />
pitzelpatz</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/309293/problem-bei-gleichzeitigem-lesen-und-schreiben-in-binärdateien</link><generator>RSS for Node</generator><lastBuildDate>Wed, 05 Aug 2026 12:09:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/309293.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Oct 2012 07:35:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem bei gleichzeitigem Lesen und Schreiben in Binärdateien on Fri, 19 Oct 2012 10:22:09 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich bin neu hier und das ist mein erster Beitrag und ich hoffe,<br />
dass ich nicht irgendwo eine passende Antwort überlesen habe <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>
<p>Ich habe ein kleines Progrämmchen geschrieben, dass das gleichzeitige Lesen und Schreiben in einer Binärdatei demonstrieren soll.<br />
Es werden Zahlen in eine Binärdatei geschrieben und zur Kontrolle ausgegeben.<br />
Die Datei wird dann zum Lesen und Schreiben geöffnet, die Zahlen werden gelesen und bei geraden Zahlen wird der &quot;Dateizeiger&quot; zurückgesetzt und die Zahl mit einer um Eins größeren Zahl überschrieben.<br />
Danach sollten in der Datei nur noch ungerade Zahlen sein.<br />
Problem: Nach dem die erste gerade Zahl ersetzt wurde, bricht das Programm ab und ich sehe einfach nicht warum. Nach der write Anweisung ist der Stream auf eof.<br />
Wenn ich nach der write-Anweisung die (eigentlich sinnlose??) Anweisung<br />
ausein.seekp(0,ios::cur); setze, die doch wohl bedeutet &quot;bleib wo du bist&quot;, läuft das Programm problemlos.<br />
Kann mir jemand dieses Verhalten erklären oder sieht, wo mein Denkfehler liegt?</p>
<p>Im folgenden Quelltext habe ich die Kontrollen, ob die Streams geöffnet werden konnten und weggelassen. Ich benutze Code::Blocks 10.05 mit GNU Compiler unter Win 7</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;cstdlib&gt;
using namespace std;
int main()
{
   int zahl=0;
   ofstream aus;
   ifstream ein;
   fstream ausein;
   aus.open(&quot;zahlen.dat&quot;,ios::binary);//---Zahlen in Datei schreiben
   for(int i=0;i&lt;10;i++)
      aus.write((char*)&amp;i,sizeof(int));
   aus.close();

   ein.open(&quot;zahlen.dat&quot;,ios::binary);//-- Zahlen aus Datei ausgeben
   while( ein.read((char*)&amp;zahl,sizeof(int)) )cout&lt;&lt;zahl&lt;&lt;&quot;,&quot;;
   ein.close();

   ausein.open(&quot;zahlen.dat&quot;,ios::in|ios::out|ios::binary);//Lesen und Schreiben
   while(ausein.read((char*)&amp;zahl,sizeof(int)))
   {
      if(zahl%2==0) //wenn gerade
      {
         zahl++;  // dann jetzt ungerade
         ausein.seekp((-1*(ios::pos_type)sizeof(int)),ios::cur); //zurueck gehen
         ausein.write((char*)&amp;zahl,sizeof(int)); //Zahl ueberschreiben
         //ausein.seekp(0,ios::cur); //damit funktioniert es ?????
      }
   }
   ausein.close();
   cout&lt;&lt;endl&lt;&lt;&quot;nach bearbeiten: &quot;&lt;&lt;endl; //Kontrollausgabe ---
   ein.clear();
   ein.open(&quot;zahlen.dat&quot;,ios::binary);
   while( ein.read((char*)&amp;zahl,sizeof(int)) )cout&lt;&lt;zahl&lt;&lt;&quot;,&quot;;
      ein.close();

   system(&quot;Pause&quot;);
   return(0);
}
</code></pre>
<p>Schon mal danke für die Mühe<br />
Gruß<br />
pitzelpatz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261897</guid><dc:creator><![CDATA[pitzelpatz]]></dc:creator><pubDate>Fri, 19 Oct 2012 10:22:09 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei gleichzeitigem Lesen und Schreiben in Binärdateien on Fri, 19 Oct 2012 09:25:46 GMT]]></title><description><![CDATA[<p>Kann ich nicht nachvollziehen, funktioniert bei mir. Habe jedoch auch ein reines Linux. Vielleicht irgendein komischer Effekt den man nur in Windows sieht? Ich sehe aber gerade keine Stelle, an der etwas schiefgehen könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261953</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 19 Oct 2012 09:25:46 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei gleichzeitigem Lesen und Schreiben in Binärdateien on Fri, 19 Oct 2012 10:20:38 GMT]]></title><description><![CDATA[<p>Hallo SeppJ,</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Kann ich nicht nachvollziehen, funktioniert bei mir. Habe jedoch auch ein reines Linux. Vielleicht irgendein komischer Effekt den man nur in Windows sieht? Ich sehe aber gerade keine Stelle, an der etwas schiefgehen könnte.</p>
</blockquote>
<p>Du hast recht. Es scheint am Compiler zu liegen.<br />
Mit Code::Blocks 10.05 und seinem default GNU Compiler läuft das Programm auf meinem Win7 64Bit PC, auf meinem Win7 64Bit Laptop<br />
und in einer virtuellen Umgebung mit Win7 32 Bit nicht und bricht wie beschrieben ab.<br />
Wenn ich das Programm mit der Orwell Dev-Cpp Umgebung und dessen<br />
TDM-GCC 4.61 64 Bit Compiler laufen lasse, funktioniert es tadellos.<br />
Das Verhalten ist aber trotzdem komisch, oder?</p>
<p>Vielen Dank, ich habe schon echt an meinem Verstand gezweifelt.</p>
<p>Gruß<br />
Pitzelpatz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261976</guid><dc:creator><![CDATA[pitzelpatz]]></dc:creator><pubDate>Fri, 19 Oct 2012 10:20:38 GMT</pubDate></item></channel></rss>