<?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[Wie kann ich Daten in einer Datei teilweise ändern]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich brauche eine Datei mit mehreren logischen Sätzen aus integer- und string-Werten. Dann möchte ich einzelne Werte der Sätze in der Datei ändern. Zu Testzwecken habe ich es mit string-Daten probiert wie in den nachstehenden Funktionen.</p>
<p>Wenn ich nun einen Wert überschreiben will, (z.B: ab Byte 12 in der Länge 6) steht dann in der Datei bis zum Byte 12 lauter Nullen, dann der zu ersetzende Text und der Rest der Daten ist weg. Was muss ich tun damit das funktioniert?</p>
<pre><code class="language-cpp">int writeBinaryFile(string path, string&amp; s, int firstByte) {
  int lastByte = -1;                              //nächstes Byte od Fehler: -1
  ofstream f(path, ios::binary);
  if (f) {
    f.seekp(firstByte);
    f.write((char*)s.c_str(), s.length());
    if (f) {
      lastByte = f.tellp();
      f.close();
      return lastByte;
    }
  }
  System::Windows::Forms::MessageBox::Show(&quot;(writeBinaryFile) Schreib-Fehler!&quot;);
  f.close();
  return lastByte;
} /// end func writeBinaryFile

int readBinryFile(string path, string&amp; s, int firstByte) {
  int lastByte = -1;
  ifstream f(path, ios::binary);
  if (f) {
    f.seekg(firstByte);
    f.read(&amp;s[0], 78);
  }
  return lastByte;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/354569/wie-kann-ich-daten-in-einer-datei-teilweise-ändern</link><generator>RSS for Node</generator><lastBuildDate>Sun, 08 Mar 2026 07:13:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/354569.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 02 Mar 2024 09:46:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie kann ich Daten in einer Datei teilweise ändern on Sat, 02 Mar 2024 09:46:02 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich brauche eine Datei mit mehreren logischen Sätzen aus integer- und string-Werten. Dann möchte ich einzelne Werte der Sätze in der Datei ändern. Zu Testzwecken habe ich es mit string-Daten probiert wie in den nachstehenden Funktionen.</p>
<p>Wenn ich nun einen Wert überschreiben will, (z.B: ab Byte 12 in der Länge 6) steht dann in der Datei bis zum Byte 12 lauter Nullen, dann der zu ersetzende Text und der Rest der Daten ist weg. Was muss ich tun damit das funktioniert?</p>
<pre><code class="language-cpp">int writeBinaryFile(string path, string&amp; s, int firstByte) {
  int lastByte = -1;                              //nächstes Byte od Fehler: -1
  ofstream f(path, ios::binary);
  if (f) {
    f.seekp(firstByte);
    f.write((char*)s.c_str(), s.length());
    if (f) {
      lastByte = f.tellp();
      f.close();
      return lastByte;
    }
  }
  System::Windows::Forms::MessageBox::Show(&quot;(writeBinaryFile) Schreib-Fehler!&quot;);
  f.close();
  return lastByte;
} /// end func writeBinaryFile

int readBinryFile(string path, string&amp; s, int firstByte) {
  int lastByte = -1;
  ifstream f(path, ios::binary);
  if (f) {
    f.seekg(firstByte);
    f.read(&amp;s[0], 78);
  }
  return lastByte;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2620698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2620698</guid><dc:creator><![CDATA[znieh99]]></dc:creator><pubDate>Sat, 02 Mar 2024 09:46:02 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich Daten in einer Datei teilweise ändern on Sat, 02 Mar 2024 10:37:23 GMT]]></title><description><![CDATA[<p>Dein Modus zum Öffnen der Datei muss <code>ios::in | ios::out | ios::binary</code> sein. Wobei ein <code>ofstream</code> schon <code>out</code> impliziert, das kannst du also auch weglassen. Das <code>in</code> mag komisch aussehen, aber macht eben das, was du willst, nämlich das weder die Datei ersetzt (das hast du jetzt), noch angehängt wird. Diese ganzen Kombinationen der Dateimodi sind ein bisschen komisch und unintuitiv. Kommt aus der Frühzeit der Computerprogrammierung. Muss man einfach wissen, logisch herleiten ist schwierig.</p>
<p>Sei dir aber bewusst, dass das die Daten an der angesprungenen Stelle überschreibt, nicht einfügt. Einfügen geht nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2620699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2620699</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 02 Mar 2024 10:37:23 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich Daten in einer Datei teilweise ändern on Sat, 02 Mar 2024 10:55:31 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a> Danke Sepp, auf diese Idee wäre ich nie gekommen, jetzt funktioniert das!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2620700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2620700</guid><dc:creator><![CDATA[znieh99]]></dc:creator><pubDate>Sat, 02 Mar 2024 10:55:31 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich Daten in einer Datei teilweise ändern on Sat, 02 Mar 2024 12:21:04 GMT]]></title><description><![CDATA[<p>Alternativ müßte auch <code>fstream f(path, ios::binary)</code> funktionieren, da dieser schon implizit <code>ios::in | ios:out</code> benutzt.</p>
<p>Trotzdem ist es eigenartig, daß die Daten gelöscht werden, da es noch <code>ios::trunc</code> dafür gibt: <a href="https://en.cppreference.com/w/cpp/io/ios_base/openmode" rel="nofollow">ios_base::openmode</a>.<br />
Aber laut Tabelle in <a href="https://en.cppreference.com/w/cpp/io/basic_filebuf/open" rel="nofollow">std::basic_filebuf&lt;CharT,Traits&gt;::open</a> gibt es nur einen Unterschied, wenn man <code>ios::in | ios:out</code> benutzt - bei nur <code>ios::out</code> oder <code>ios:out | ios::binary</code> wird implizit immer <code>ios::trunc</code> verwendet).</p>
<p>PS: Ich habe jetzt auch immer, der Kürze wegen, <code>ios</code> geschrieben, auch wenn <code>openmode</code> eigentlich in der Basisklasse <code>ios_base</code>definiert ist, obwohl es nur als <code>typedef</code> definiert ist, s. <a href="https://en.cppreference.com/w/cpp/io/basic_ios" rel="nofollow">basic_ios</a> (bzw. ich erinnere mich, daß es in früheren Versionen noch eine von <code>ios_base</code> abgeleitete Klasse war).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2620701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2620701</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 02 Mar 2024 12:21:04 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich Daten in einer Datei teilweise ändern on Sat, 02 Mar 2024 12:34:36 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18594">@Th69</a> Ja, das mit fstream habe ich mir auch schon gedacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2620702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2620702</guid><dc:creator><![CDATA[znieh99]]></dc:creator><pubDate>Sat, 02 Mar 2024 12:34:36 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich Daten in einer Datei teilweise ändern on Sun, 03 Mar 2024 14:59:44 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/37047">@znieh99</a></p>
<p>um mit Niklaus Wirth (* 15. Februar 1934 in Winterthur; † 1. Januar 2024 in Zürich) zu antworten: Wahlfreier Zugriff (Random Access) findet nicht auf Dateiebene sondern im Hauptspeicher statt. Denn: Dateien sind Sequenzen, sie werden sequentiell gelesen und sequentiell geschrieben.</p>
<p>Das heißt: Lese den Dateiinhalt auf eine zweckmäßige Datenstruktur (Array, Liste, Map o.ä) und bearbeite diese. Anschließend schreibe diese Daten zurück in die Sequenz (Serialize). Die Frage ist also, wie man abstrakte Datentypen in Sequenzen serialisiert und umgekehrt. Und aus OOP-Sicht könnte man die Daten im RAM als Objekte auffassen die dafür ihre eigenen Methoden bescheiben.</p>
<p>MFG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2620723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2620723</guid><dc:creator><![CDATA[_ro_ro]]></dc:creator><pubDate>Sun, 03 Mar 2024 14:59:44 GMT</pubDate></item></channel></rss>