<?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[Datei schreiben&#x2F;lesen klappt nicht]]></title><description><![CDATA[<p>Hallo! (Wieder Ich)</p>
<p>Ein für mich schwieriges Thema ist immer die Dateiarbeit in C++ da ich diese Char Zeiger hasse... Bei Ausführung des folgenden Quelltextes wird bei einem ersten Durchgang alles richtig gemacht nur bei nochmaliger Ausführung gibts an gekennzeichneter stelle immer ne Belegung mit absoluten ascii müll...</p>
<pre><code>DeleteFileA(&quot;c:\\test.dat&quot;);

  int MyFileHandle = FileCreate(&quot;c:\\test.dat&quot;);
  if (MyFileHandle &lt; 0) MyFileHandle = FileOpen( &quot;c:\\test.dat&quot;,fmOpenReadWrite	);

  //Schreiben
  AnsiString Entry = Edit1-&gt;Text;

  int LengthOfEntry = Entry.Length() + 1;
  FileWrite(MyFileHandle, &amp;LengthOfEntry, sizeof(LengthOfEntry));
  FileWrite(MyFileHandle, Entry.c_str(), LengthOfEntry);

  Entry = Edit2-&gt;Text;

  LengthOfEntry = Entry.Length()+ 1;
  FileWrite(MyFileHandle, &amp;LengthOfEntry, sizeof(LengthOfEntry));
  FileWrite(MyFileHandle, Entry.c_str(), LengthOfEntry);  
  //ist .c_str() okay? is doch nicht zum belegen gedacht oder

  FileClose(MyFileHandle);

  //Lesen

  MyFileHandle = FileOpen( &quot;c:\\test.dat&quot;, fmOpenReadWrite	);

  LengthOfEntry = 0;
  char * buffer; // versuch mit char* da auch AnsiString nicht funzt

  FileRead(MyFileHandle, &amp;LengthOfEntry , sizeof(LengthOfEntry));
  buffer = new char[LengthOfEntry];
  FileRead(MyFileHandle, buffer, LengthOfEntry); //!!!!!!!!!!! GEKENNZEICHNETE STELLE ;)

  Memo1-&gt;Lines-&gt;Add(buffer); //gibt beim 2. mal ascii-wust aus
  delete buffer;
  buffer =0;

  LengthOfEntry = 0;

  FileRead(MyFileHandle, &amp;LengthOfEntry , sizeof(LengthOfEntry));
  FileRead(MyFileHandle, Entry.c_str(), LengthOfEntry );

 Memo1-&gt;Lines-&gt;Add(Entry);
</code></pre>
<p>Hab ich das mit dem schreiben denn richtig gemacht? (Länge ermitteln etc.)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/83835/datei-schreiben-lesen-klappt-nicht</link><generator>RSS for Node</generator><lastBuildDate>Thu, 02 Jul 2026 07:15:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/83835.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Aug 2004 05:21:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datei schreiben&#x2F;lesen klappt nicht on Wed, 25 Aug 2004 05:21:15 GMT]]></title><description><![CDATA[<p>Hallo! (Wieder Ich)</p>
<p>Ein für mich schwieriges Thema ist immer die Dateiarbeit in C++ da ich diese Char Zeiger hasse... Bei Ausführung des folgenden Quelltextes wird bei einem ersten Durchgang alles richtig gemacht nur bei nochmaliger Ausführung gibts an gekennzeichneter stelle immer ne Belegung mit absoluten ascii müll...</p>
<pre><code>DeleteFileA(&quot;c:\\test.dat&quot;);

  int MyFileHandle = FileCreate(&quot;c:\\test.dat&quot;);
  if (MyFileHandle &lt; 0) MyFileHandle = FileOpen( &quot;c:\\test.dat&quot;,fmOpenReadWrite	);

  //Schreiben
  AnsiString Entry = Edit1-&gt;Text;

  int LengthOfEntry = Entry.Length() + 1;
  FileWrite(MyFileHandle, &amp;LengthOfEntry, sizeof(LengthOfEntry));
  FileWrite(MyFileHandle, Entry.c_str(), LengthOfEntry);

  Entry = Edit2-&gt;Text;

  LengthOfEntry = Entry.Length()+ 1;
  FileWrite(MyFileHandle, &amp;LengthOfEntry, sizeof(LengthOfEntry));
  FileWrite(MyFileHandle, Entry.c_str(), LengthOfEntry);  
  //ist .c_str() okay? is doch nicht zum belegen gedacht oder

  FileClose(MyFileHandle);

  //Lesen

  MyFileHandle = FileOpen( &quot;c:\\test.dat&quot;, fmOpenReadWrite	);

  LengthOfEntry = 0;
  char * buffer; // versuch mit char* da auch AnsiString nicht funzt

  FileRead(MyFileHandle, &amp;LengthOfEntry , sizeof(LengthOfEntry));
  buffer = new char[LengthOfEntry];
  FileRead(MyFileHandle, buffer, LengthOfEntry); //!!!!!!!!!!! GEKENNZEICHNETE STELLE ;)

  Memo1-&gt;Lines-&gt;Add(buffer); //gibt beim 2. mal ascii-wust aus
  delete buffer;
  buffer =0;

  LengthOfEntry = 0;

  FileRead(MyFileHandle, &amp;LengthOfEntry , sizeof(LengthOfEntry));
  FileRead(MyFileHandle, Entry.c_str(), LengthOfEntry );

 Memo1-&gt;Lines-&gt;Add(Entry);
</code></pre>
<p>Hab ich das mit dem schreiben denn richtig gemacht? (Länge ermitteln etc.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/590455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/590455</guid><dc:creator><![CDATA[FrankHof]]></dc:creator><pubDate>Wed, 25 Aug 2004 05:21:15 GMT</pubDate></item><item><title><![CDATA[Reply to Datei schreiben&#x2F;lesen klappt nicht on Wed, 25 Aug 2004 05:26:17 GMT]]></title><description><![CDATA[<p>Ach ich bin soo blöde... hab die datei doch nach den lesen nicht geschlossen ;))</p>
<p>Sorry fürs zumüllen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/590457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/590457</guid><dc:creator><![CDATA[FrankHof]]></dc:creator><pubDate>Wed, 25 Aug 2004 05:26:17 GMT</pubDate></item><item><title><![CDATA[Reply to Datei schreiben&#x2F;lesen klappt nicht on Wed, 25 Aug 2004 06:45:20 GMT]]></title><description><![CDATA[<p>ne paar fragen hätt ich aber noch:</p>
<p>Das mit dem Belegen per AnsiStringNAME.c_str() is doch nicht in Ordnung oder?<br />
Wie kann ich das auf einfache weise umgehen und einen AnsiString erhalten?<br />
Beim Schreiben und Lesen muss ich doch die Nulltermination miteinberechnen oder?</p>
<p>Problem ist dass das zu schreibende Zeugs nicht echter AsciiCode sondern Sonderzeichen sind etc.<br />
Hört er falls er innerhalb des zuschreibenden char &quot;arrays&quot; ein \0 findet eher auf mit schreiben?</p>
<p>Wie kann ich Sonderzeichen wie \0 und \irgenwas an einen AnsiString oder char * anhängen? mit += gehts nicht....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/590485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/590485</guid><dc:creator><![CDATA[FrankHof]]></dc:creator><pubDate>Wed, 25 Aug 2004 06:45:20 GMT</pubDate></item><item><title><![CDATA[Reply to Datei schreiben&#x2F;lesen klappt nicht on Wed, 25 Aug 2004 07:09:45 GMT]]></title><description><![CDATA[<p>hi,<br />
zu den ersten drei fragen enthalt ich mich lieber, da ich mir nicht sicher bin!</p>
<p>4.: wenn du einen backslash setzt, dann weiss der compiler, dass das nachfolgende zeichen zum string gehört. Also auch \0, \irgendwas^^ daher ist auch nur \\ ein \</p>
<p>5.: mit strcat(); kannst du an den wert von variablen einen String oder eine Variable anfügen.<br />
Bsp.:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;

String buffer=&quot;hallo welt!&quot;; //vars
String anders=&quot; wie geht\'s?&quot;;

strcat(buffer,anders);  // buffer=&quot;hallo welt! wie geht\'s?&quot;

ShowMessage(&quot;Buffer hat den Wert &quot;+buffer);
</code></pre>
<p>eine nützliche funktion!<br />
[edit] verwandte funktionen von strcat():</p>
<p>strcpy(); um den wert von variablen zu ersetzen<br />
strcpy(buffer,&quot;hallo&quot;); buffer wird &quot;hallo&quot;</p>
<p>strcmp(); um den wert von vars auf gleichen wert zu prüfen<br />
strcmp(buffer,buffer); gibt 0 zurück, da buffer gleich buffer<br />
ist, also gleicher wert gleich 0</p>
<p>strlen(); müssten wohl alle wissen^^</p>
<p>ich glaub das waren alle strs</p>
]]></description><link>https://www.c-plusplus.net/forum/post/590494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/590494</guid><dc:creator><![CDATA[Blackhawk]]></dc:creator><pubDate>Wed, 25 Aug 2004 07:09:45 GMT</pubDate></item><item><title><![CDATA[Reply to Datei schreiben&#x2F;lesen klappt nicht on Wed, 25 Aug 2004 07:14:30 GMT]]></title><description><![CDATA[<p>Blackhawk schrieb:</p>
<blockquote>
<p>5.: mit strcat(); kannst du an den wert von variablen einen String oder eine Variable anfügen.</p>
</blockquote>
<p>Wenn du mit AnsiString arbeitest, kannst du weitere Strings mit dem Operator + oder dem Operator += anhängen, das ist wesentlich komfortabler als strcat().</p>
<pre><code class="language-cpp">AnsiString as(&quot;Hallo,&quot;), as2(&quot; Welt!&quot;);

as = as + as2; //oder
as += as2;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/590501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/590501</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Wed, 25 Aug 2004 07:14:30 GMT</pubDate></item><item><title><![CDATA[Reply to Datei schreiben&#x2F;lesen klappt nicht on Wed, 25 Aug 2004 09:13:54 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1592">@PuppetMaster2k</a><br />
damit gehts nicht denn ich hab ja Zeichen wie zb. \0 oder ähnliches</p>
]]></description><link>https://www.c-plusplus.net/forum/post/590583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/590583</guid><dc:creator><![CDATA[FrankHof]]></dc:creator><pubDate>Wed, 25 Aug 2004 09:13:54 GMT</pubDate></item><item><title><![CDATA[Reply to Datei schreiben&#x2F;lesen klappt nicht on Wed, 25 Aug 2004 09:44:34 GMT]]></title><description><![CDATA[<p>genau<br />
deswegen nimm strcat</p>
]]></description><link>https://www.c-plusplus.net/forum/post/590626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/590626</guid><dc:creator><![CDATA[Blackhawk]]></dc:creator><pubDate>Wed, 25 Aug 2004 09:44:34 GMT</pubDate></item><item><title><![CDATA[Reply to Datei schreiben&#x2F;lesen klappt nicht on Wed, 25 Aug 2004 11:20:21 GMT]]></title><description><![CDATA[<p>Also Leute hier noch mal die Funktion, wie gesagt es funzt nich wenn ich \0 oder ähnliche zeichen an den Char Zeiger anhängen will, da die funktion strcat ja bis zum \0 kopiert...</p>
<pre><code>AnsiString DeCryptString(AnsiString ToCrypt, int Length, AnsiString Key, bool Crypt = true){

   char* Crypted;
   char AddChar[1];

   for(int i=1,j=1; i &lt;= Length; i++, j++){
        if(j == Key.Length() ) j = 1;
         if (!Crypt &amp;&amp; (ToCrypt[i] == char(&quot;_&quot;) ) ) ToCrypt[i] = char(&quot;\0&quot;);
          AddChar[1] = Crypt ? ( ToCrypt[i] ^ Key[j] ) : ( Key[j] ^ ToCrypt[i] );
         if (Crypt &amp;&amp; (AddChar[1] == char(&quot;\0&quot;) ) ) AddChar[1] = char(&quot;_&quot;);
         strcat(Crypted, AddChar );
       }
   return Crypted;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/590756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/590756</guid><dc:creator><![CDATA[FrankHof]]></dc:creator><pubDate>Wed, 25 Aug 2004 11:20:21 GMT</pubDate></item><item><title><![CDATA[Reply to Datei schreiben&#x2F;lesen klappt nicht on Wed, 25 Aug 2004 12:24:47 GMT]]></title><description><![CDATA[<p>Wenn du Zeichen wie \0 mit in deine Felder aufnehmen willst, dann kannst du auch keine Stringfunktionen (wie strlen, strcat etc.) mehr verwenden. In dem Fall bieten sich Funktionen wie memcpy o.ä. an, bzw. die Verwendung von Streams.<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/7813">@Blackhawk</a><br />
strcat mit zwei AnsiStrings (wie du oben geschrieben hast) sollte gar nicht funktionieren und einen Compilerfehler bringen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/590811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/590811</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 25 Aug 2004 12:24:47 GMT</pubDate></item></channel></rss>