<?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[binär speichern - finde fehler einfach net]]></title><description><![CDATA[<p>hi!</p>
<p>ich war gerade dabei ein Programm zu schreiben das mir eine Liste aus Strings speichert<br />
Ich will bewusst keine TStringList verwenden</p>
<p>es lief ganz gut und plötzlich wurde garnichts mehr nach dem lesen aus der Datei angezeigt</p>
<p>habe also nach und nach Zeilen entfernt in der Hoffnung den Fehler zu finden...</p>
<p>das hier ist was dabei rausgekommen ist:<br />
aber ich sehe einfach den Fehler nicht!!<br />
Sitze schon nen Stunde dran und kom mir verdammt blöd vor...</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop
 #include &lt;stdlib.h&gt;
 #include &lt;stdio.h&gt;

#include &lt;iostream&gt;

#include &quot;Unit1.h&quot;
using namespace std;
#include &lt;fstream&gt;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
TForm1 *Form1;
int longest(TStringList *a)
{
int max=0;
for(int b=0; b&lt;a-&gt;Count;b++)
if(a-&gt;Strings[b].Length() &gt; max)
max = a-&gt;Strings[b].Length();
return max;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
const int length = 12;
const int anzahl = 10;
fstream File(&quot;List2.dat&quot;, ios::out|ios::binary);
if (File.is_open())       // Wenn Datei geöffnet ist
{
    File.write((const char*)&amp;length, sizeof(length));        // 1. Länge speichern
    File.write((const char*)&amp;anzahl, sizeof(anzahl));        // 1. Anzahl speichern

    File.close();   // Datei schließen
}

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
fstream File2(&quot;List.dat&quot;, ios::in|ios::binary);
if (File2.is_open())
{

int Size;
    File2.read((char*)&amp;Size, sizeof(Size));   //Länge lesen
int number;
        File2.read((char*)&amp;number, sizeof(number));   //Anzahl lesen
    ListBox1-&gt;Items-&gt;Add(Size);                       //Länge ausgeben
    ListBox1-&gt;Items-&gt;Add(number);                     //Anzahl ausgeben
    }
 File2.close();
}
//---------------------------------------------------------------------------
</code></pre>
<p>Könnt ihr mir helfen??</p>
<p>Schonmal vielen Dank!!!!</p>
<p>MfG Straightflush</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/170864/binär-speichern-finde-fehler-einfach-net</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 03:44:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170864.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 20 Jan 2007 12:43:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to binär speichern - finde fehler einfach net on Sat, 20 Jan 2007 12:43:02 GMT]]></title><description><![CDATA[<p>hi!</p>
<p>ich war gerade dabei ein Programm zu schreiben das mir eine Liste aus Strings speichert<br />
Ich will bewusst keine TStringList verwenden</p>
<p>es lief ganz gut und plötzlich wurde garnichts mehr nach dem lesen aus der Datei angezeigt</p>
<p>habe also nach und nach Zeilen entfernt in der Hoffnung den Fehler zu finden...</p>
<p>das hier ist was dabei rausgekommen ist:<br />
aber ich sehe einfach den Fehler nicht!!<br />
Sitze schon nen Stunde dran und kom mir verdammt blöd vor...</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop
 #include &lt;stdlib.h&gt;
 #include &lt;stdio.h&gt;

#include &lt;iostream&gt;

#include &quot;Unit1.h&quot;
using namespace std;
#include &lt;fstream&gt;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
TForm1 *Form1;
int longest(TStringList *a)
{
int max=0;
for(int b=0; b&lt;a-&gt;Count;b++)
if(a-&gt;Strings[b].Length() &gt; max)
max = a-&gt;Strings[b].Length();
return max;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
const int length = 12;
const int anzahl = 10;
fstream File(&quot;List2.dat&quot;, ios::out|ios::binary);
if (File.is_open())       // Wenn Datei geöffnet ist
{
    File.write((const char*)&amp;length, sizeof(length));        // 1. Länge speichern
    File.write((const char*)&amp;anzahl, sizeof(anzahl));        // 1. Anzahl speichern

    File.close();   // Datei schließen
}

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
fstream File2(&quot;List.dat&quot;, ios::in|ios::binary);
if (File2.is_open())
{

int Size;
    File2.read((char*)&amp;Size, sizeof(Size));   //Länge lesen
int number;
        File2.read((char*)&amp;number, sizeof(number));   //Anzahl lesen
    ListBox1-&gt;Items-&gt;Add(Size);                       //Länge ausgeben
    ListBox1-&gt;Items-&gt;Add(number);                     //Anzahl ausgeben
    }
 File2.close();
}
//---------------------------------------------------------------------------
</code></pre>
<p>Könnt ihr mir helfen??</p>
<p>Schonmal vielen Dank!!!!</p>
<p>MfG Straightflush</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213139</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Sat, 20 Jan 2007 12:43:02 GMT</pubDate></item><item><title><![CDATA[Reply to binär speichern - finde fehler einfach net on Sat, 20 Jan 2007 13:03:06 GMT]]></title><description><![CDATA[<p>&quot;habe also nach und nach Zeilen entfernt in der Hoffnung den Fehler zu finden...&quot;</p>
<p>- ist auch 'ne Möglichkeit, die Nutzung des Debuggers jedoch die bessere!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213152</guid><dc:creator><![CDATA[Rostfrei**]]></dc:creator><pubDate>Sat, 20 Jan 2007 13:03:06 GMT</pubDate></item><item><title><![CDATA[Reply to binär speichern - finde fehler einfach net on Sat, 20 Jan 2007 13:23:58 GMT]]></title><description><![CDATA[<p>danke für den Tipp<br />
aber was soll ich machen wenn der keine Meldung ausspuckt?</p>
<p>welche option soll ich da überhaupt nehmen?<br />
Ausdrücke überwachen?</p>
<p>kenn mich halt leider garnet aus mit dem ding</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213163</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Sat, 20 Jan 2007 13:23:58 GMT</pubDate></item><item><title><![CDATA[Reply to binär speichern - finde fehler einfach net on Sat, 20 Jan 2007 13:26:50 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>bei FormCreate -&gt; WriteFile &quot;List2.dat&quot;<br />
bei ButtonClick -&gt; ReadFile &quot;List.dat&quot;</p>
<p>da ist doch was oberfaul - oder sehe ich das falsch</p>
<p>Mfg<br />
Klaus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213165</guid><dc:creator><![CDATA[KlausB]]></dc:creator><pubDate>Sat, 20 Jan 2007 13:26:50 GMT</pubDate></item><item><title><![CDATA[Reply to binär speichern - finde fehler einfach net on Sat, 20 Jan 2007 13:31:30 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> und ich reg mich da ewig auf!!!!!!!!</p>
<p>Sorry das ich euch belästigt habe!<br />
Nochmal vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213168</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Sat, 20 Jan 2007 13:31:30 GMT</pubDate></item><item><title><![CDATA[Reply to binär speichern - finde fehler einfach net on Sat, 20 Jan 2007 14:24:28 GMT]]></title><description><![CDATA[<p>darf ich euch nochmal stören?</p>
<p>Ich hab jetzt versucht ein char binär zu speichern,<br />
der inhalt des char wird aus einem string gewonnen, dieser hat nur 7stellen,<br />
das char array aber hat 9, soll auch so sein</p>
<p>habe ich jetzt abgespeichert und will wieder öffnen bekomme ich die Meldung: &quot;Zugriffsverletzung bei Adresse[...] in Modul rtl60.bpl. Lesen von Adresse [...]</p>
<p>Speicher ich nur den Zeiger ab??<br />
entferne ich das &quot;&amp;&quot;ändert sich zwar der Inhalt der Datei und der gespeicherte &quot;String&quot; ist lesbar, das Problem beim auslesen ändert sich aber nicht...</p>
<p>Kann mir einer von euch Profis nochmal helfen?</p>
<p>So schreibe ich in die Datei</p>
<pre><code class="language-cpp">TStringList *List = new TStringList;
List-&gt;LoadFromFile(&quot;list.txt&quot;);
const int length = longest(List);
const int anzahl = List-&gt;Count;
fstream File(&quot;List2.dat&quot;, ios::out|ios::binary);
if (File.is_open())       // Wenn Datei geöffnet ist
{
    File.write((const char*)&amp;length, sizeof(length));        // 1. Länge speichern
    File.write((const char*)&amp;anzahl, sizeof(anzahl));        // 1. Anzahl speichern
    char *buffer1 = new char(length);
    buffer1 = NULL;
    List-&gt;Strings[0].SetLength(length);
    buffer1 = List-&gt;Strings[0].c_str();
    File.write((const char*)buffer1, length);

    File.close();   // Datei schließen
}
</code></pre>
<p>und so lese ich daraus:</p>
<pre><code class="language-cpp">fstream File2(&quot;List2.dat&quot;, ios::in|ios::binary);
if (File2.is_open())
{

int Size;
    File2.read((char*)&amp;Size, sizeof(Size));   //Länge lesen
int number;
        File2.read((char*)&amp;number, sizeof(number));   //Anzahl lesen
    ListBox1-&gt;Items-&gt;Add(Size);                       //Länge ausgeben
    ListBox1-&gt;Items-&gt;Add(number);                     //Anzahl ausgeben
    char *buffer2 = new char(Size);
    File2.read((char*)&amp;buffer2, Size);
    String str = buffer2;
    ListBox1-&gt;Items-&gt;Add(str);
    }

 File2.close();
</code></pre>
<p>Straightflush</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213191</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Sat, 20 Jan 2007 14:24:28 GMT</pubDate></item><item><title><![CDATA[Reply to binär speichern - finde fehler einfach net on Sat, 20 Jan 2007 23:30:52 GMT]]></title><description><![CDATA[<p>keiner eine Idee/heißen Tipp/Beispiel?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213467</guid><dc:creator><![CDATA[Straightflush]]></dc:creator><pubDate>Sat, 20 Jan 2007 23:30:52 GMT</pubDate></item><item><title><![CDATA[Reply to binär speichern - finde fehler einfach net on Sun, 21 Jan 2007 01:30:11 GMT]]></title><description><![CDATA[<p>Hi ich verstehe nicht wieso du ein *char noch extra in ein (char <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="😉"
    /><br />
verwandeln möchtest (es ist doch schon ein Zeiger)</p>
<p>Z.B:<br />
File2.read((char*)&amp;buffer2, Size);<br />
.<br />
.<br />
File2.read(buffer2, Size);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213492</guid><dc:creator><![CDATA[steinsoft]]></dc:creator><pubDate>Sun, 21 Jan 2007 01:30:11 GMT</pubDate></item><item><title><![CDATA[Reply to binär speichern - finde fehler einfach net on Sun, 21 Jan 2007 02:00:31 GMT]]></title><description><![CDATA[<p>Ich glaub ich hab oben gerade Mist geschrieben.... dein Code ist an der Stelle richtig</p>
<pre><code class="language-cpp">char *buffer2 = new char(Size+1); // +1
</code></pre>
<p>und das am Schluss</p>
<pre><code class="language-cpp">delete [] ch;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1213495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213495</guid><dc:creator><![CDATA[steinsoft]]></dc:creator><pubDate>Sun, 21 Jan 2007 02:00:31 GMT</pubDate></item><item><title><![CDATA[Reply to binär speichern - finde fehler einfach net on Sun, 21 Jan 2007 08:50:12 GMT]]></title><description><![CDATA[<p>Straightflush schrieb:</p>
<blockquote>
<p>danke für den Tipp<br />
aber was soll ich machen wenn der keine Meldung ausspuckt?</p>
</blockquote>
<p><a href="http://www.junix.ch/bcb/help/debug.html" rel="nofollow">Debuggger</a> spucken keine Meldungen aus sondern sind Handwerkszeuge welche die Option eröffnen den Programmablauf zu überprüfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213517</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Sun, 21 Jan 2007 08:50:12 GMT</pubDate></item><item><title><![CDATA[Reply to binär speichern - finde fehler einfach net on Sun, 21 Jan 2007 09:25:35 GMT]]></title><description><![CDATA[<p>morgaehn</p>
<p>ich wuerde es ungefaehr so loesen:</p>
<p>StreamHelper.h</p>
<pre><code class="language-cpp">#ifndef StreamHelperH
#define StreamHelperH
#include &lt;iostream&gt;
#include &lt;system.hpp&gt; // wegen AnsiString &lt;- weiß nur net ob das jetz wirklich stimmmt

template &lt;class T&gt;
 void BinaryWrite(std::ostream &amp;out, T val)
{
   out.write(reinterpret_cast&lt;const char*&gt;(&amp;val), sizeof(val));
}

template &lt;class T&gt;
void BinaryRead(std::istream &amp;in, T &amp;in)
{
   in.read(reinterpret_cast&lt;char*&gt;(&amp;val), sizeof(val));
}

template&lt;&gt;
void BinaryWrite(std::ostream &amp;out, const AnsiString &amp;str)
{
   BinaryWrite(out, str.Length());
   out.write(str.c_str(), str.Length());
}

template&lt;&gt;
void BinaryRead(std::istream &amp;in, AnsiString &amp;str)
{
   int t_len; // muss gleich gross sein wie sizeof(AnsiString.Length())
   BinaryRead(in, t_len);
   if(!t_len) return;
   char *buffer = new char[t_len];
   in.read(buffer, t_len);
   str = AnsiString(buffer, t_len);
   delete[] buffer;
}

#endif
</code></pre>
<p>in datei schreiben:</p>
<pre><code class="language-cpp">TStringList *List = new TStringList;
List-&gt;LoadFromFile(&quot;list.txt&quot;);

std::ofstream datei(&quot;liste2.txt&quot;, std::ios::binary);
BinaryWrite(datei, List-&gt;Count());
for(int i = 0;i &lt; List-&gt;Count();++i)
{
   WriteBinary(datei, List[i]);
}
datei.close();
</code></pre>
<p>aus datei lesen</p>
<pre><code class="language-cpp">TStringList my_list;
std::ifstream datei(&quot;liste2.txt&quot;, std::ios::binary);
int count;
BinaryRead(datei, count);
while(count--)
{
   AnsiString temp;
   BinaryRead(datei, temp);
   my_list.Add(temp);
}
datei.close();
</code></pre>
<p>der source ist ungetestet. nur mal so aus dem kopf geschrieben</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213525</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sun, 21 Jan 2007 09:25:35 GMT</pubDate></item></channel></rss>