<?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[Typen in Datei binär schreiben&#x2F;lesen]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>mein erster Post und gleich ein Problem:<br />
Also erstmal die Situation: Ich habe eine Binärdatei, inder immer folgende Blöcke(int/int/double) gespeichert werden sollen:</p>
<p>(int-wert)<br />
(int-wert)<br />
(double-wert)<br />
(int-wert)<br />
(int-wert)<br />
(double-wert)<br />
...</p>
<p>Nun soll es zwei Methoden geben, eine die diese drei Werte liest, und eine, die die drei Werte schreibt. Als Argument bekommen die Methoden jeweils eine Position in der Datei (also wo die drei Werte gelesen/geschrieben werden sollen).<br />
Wie stelle ich das an?</p>
<p>Meine bisherige Lösung<br />
----------------------</p>
<p>Lesen:</p>
<pre><code class="language-cpp">std::fstream filestream(&quot;test.txt&quot;, fstream::in | fstream::out | fstream::binary);

filestream.seekg(position, ios_base::beg);	

filestream &gt;&gt; tmp; n[i] = tmp; 
filestream &gt;&gt; tmp; a[i] = tmp;
filestream &gt;&gt; tmp; c[i] = tmp; 

filestream.close();
</code></pre>
<p>Schreiben:</p>
<pre><code class="language-cpp">std::fstream filestream(&quot;test.txt&quot;, fstream::in | fstream::out | fstream::binary);

filestream.seekp(position, std::ios_base::beg);			

filestream &lt;&lt; n[i] &lt;&lt; endl;
filestream &lt;&lt; a[i] &lt;&lt; endl;
filestream &lt;&lt; c[i] &lt;&lt; endl;

filestream.close();
</code></pre>
<p>Die Position, an der gelesen/geschrieben werden soll, berechne ich so:<br />
Wenn ich z.B. den 2. Block holen möchte, ist</p>
<pre><code class="language-cpp">position = (sizeof(int) + sizeof(int) + sizeof(double)) * 2
</code></pre>
<p>Aber irgendwie habe ich da denkfehler drin, das ganze funktioniert nur teilweise...</p>
<p>Hat einer eine Idee was zu tun ist?<br />
Vielen Dank fürs bis hierher lesen.</p>
<p>Gruß<br />
Björn</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/215760/typen-in-datei-binär-schreiben-lesen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 02:08:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/215760.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 15 Jun 2008 08:47:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Typen in Datei binär schreiben&#x2F;lesen on Sun, 15 Jun 2008 08:47:13 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>mein erster Post und gleich ein Problem:<br />
Also erstmal die Situation: Ich habe eine Binärdatei, inder immer folgende Blöcke(int/int/double) gespeichert werden sollen:</p>
<p>(int-wert)<br />
(int-wert)<br />
(double-wert)<br />
(int-wert)<br />
(int-wert)<br />
(double-wert)<br />
...</p>
<p>Nun soll es zwei Methoden geben, eine die diese drei Werte liest, und eine, die die drei Werte schreibt. Als Argument bekommen die Methoden jeweils eine Position in der Datei (also wo die drei Werte gelesen/geschrieben werden sollen).<br />
Wie stelle ich das an?</p>
<p>Meine bisherige Lösung<br />
----------------------</p>
<p>Lesen:</p>
<pre><code class="language-cpp">std::fstream filestream(&quot;test.txt&quot;, fstream::in | fstream::out | fstream::binary);

filestream.seekg(position, ios_base::beg);	

filestream &gt;&gt; tmp; n[i] = tmp; 
filestream &gt;&gt; tmp; a[i] = tmp;
filestream &gt;&gt; tmp; c[i] = tmp; 

filestream.close();
</code></pre>
<p>Schreiben:</p>
<pre><code class="language-cpp">std::fstream filestream(&quot;test.txt&quot;, fstream::in | fstream::out | fstream::binary);

filestream.seekp(position, std::ios_base::beg);			

filestream &lt;&lt; n[i] &lt;&lt; endl;
filestream &lt;&lt; a[i] &lt;&lt; endl;
filestream &lt;&lt; c[i] &lt;&lt; endl;

filestream.close();
</code></pre>
<p>Die Position, an der gelesen/geschrieben werden soll, berechne ich so:<br />
Wenn ich z.B. den 2. Block holen möchte, ist</p>
<pre><code class="language-cpp">position = (sizeof(int) + sizeof(int) + sizeof(double)) * 2
</code></pre>
<p>Aber irgendwie habe ich da denkfehler drin, das ganze funktioniert nur teilweise...</p>
<p>Hat einer eine Idee was zu tun ist?<br />
Vielen Dank fürs bis hierher lesen.</p>
<p>Gruß<br />
Björn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1529357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529357</guid><dc:creator><![CDATA[bjoernt]]></dc:creator><pubDate>Sun, 15 Jun 2008 08:47:13 GMT</pubDate></item><item><title><![CDATA[Reply to Typen in Datei binär schreiben&#x2F;lesen on Sun, 15 Jun 2008 10:45:54 GMT]]></title><description><![CDATA[<p>die sache mit den &lt;&lt; und &gt;&gt; operatoren ist zwar schön, aber sie funktioniert meinst nur mit textdateien.<br />
um binäre daten zu lesen oder zu schreiben gibt es read/write.</p>
<pre><code class="language-cpp">filestream.read(&amp;temp, sizeof(temp));
// ...
filestream.write(&amp;temp, sizeof(temp));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1529401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529401</guid><dc:creator><![CDATA[filestream]]></dc:creator><pubDate>Sun, 15 Jun 2008 10:45:54 GMT</pubDate></item><item><title><![CDATA[Reply to Typen in Datei binär schreiben&#x2F;lesen on Sun, 15 Jun 2008 11:13:57 GMT]]></title><description><![CDATA[<p>OK danke, ich probiere jetzt mal mit read/write Objekte in die Datei zuschieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1529412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529412</guid><dc:creator><![CDATA[bjoernt]]></dc:creator><pubDate>Sun, 15 Jun 2008 11:13:57 GMT</pubDate></item></channel></rss>