<?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[Laden von Dateien in Streams]]></title><description><![CDATA[<p>Schon alleine der Titel sagt es aus:<br />
Ein Meister der Programmierkunst bin ich nicht.</p>
<p>Ich versuche mich gerade daran, eine .txt - Datei in einen String zu laden und scheitere dabei. Bis jetzt habe ich die Datei öffnen können, aber das wars auch. Soweit ich weiss, muss man eine Datei zuerst in einen Stream laden, um sie dann Stück für Stück in den entsprechenden String zu übertragen (der ja auch ein Stream ist, afaik)<br />
Ich poste mal den Code (bestimmte Variablen wurden bereits global vorgegeben, das ist aber nicht das Problem.)<br />
Es ist für den Borland C++ geschrieben, es wäre aber nett wenn es auch eine Verallgemeinerung gäbe, die mich von diesem Compiler etwas unabhängig macht.</p>
<blockquote>
<p>int pos,check[8];<br />
long length;<br />
char *buffer;<br />
Form1-&gt;OpenDialog1-&gt;Execute();<br />
Folder=OpenDialog1-&gt;FileName;<br />
pos=Folder.LastDelimiter(&quot;\&quot;);<br />
Folder=Folder.SubString(0,pos);</p>
<p>for (int a1=0;a1&lt;9;a1++)<br />
{<br />
check[a1]=FileOpen(Folder + Filenames[a1],0);<br />
}<br />
Memo1-&gt;Text= Folder;</p>
<p>//begin for1<br />
for (int a2=0;a2&lt;9;a2++)<br />
{<br />
if (check[a2]==-1)<br />
{<br />
Memo1-&gt;Lines-&gt;Add(&quot;Error on &quot; + Filenames[a2]);<br />
Textfiles[a2]=&quot;na&quot;;<br />
}<br />
else<br />
{<br />
Textfiles[a2]=IntToStr(check[a2]);<br />
}<br />
}<br />
//end of for1</p>
<p>for (int a=0;a&lt;9;a++)<br />
{<br />
Memo1-&gt;Lines-&gt;Add(Textfiles[a]);<br />
}<br />
length=filelength(check[0]);<br />
Textfiles[0]=Textfiles[0].LoadStr(check[0]);<br />
Textfiles[0]=(Textfiles[0] + buffer);<br />
Memo1-&gt;Lines-&gt;Add(IntToStr(length) + Textfiles[0]);<br />
}</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/topic/139371/laden-von-dateien-in-streams</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 22:29:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/139371.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 06 Mar 2006 09:40:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Laden von Dateien in Streams on Mon, 06 Mar 2006 09:40:28 GMT]]></title><description><![CDATA[<p>Schon alleine der Titel sagt es aus:<br />
Ein Meister der Programmierkunst bin ich nicht.</p>
<p>Ich versuche mich gerade daran, eine .txt - Datei in einen String zu laden und scheitere dabei. Bis jetzt habe ich die Datei öffnen können, aber das wars auch. Soweit ich weiss, muss man eine Datei zuerst in einen Stream laden, um sie dann Stück für Stück in den entsprechenden String zu übertragen (der ja auch ein Stream ist, afaik)<br />
Ich poste mal den Code (bestimmte Variablen wurden bereits global vorgegeben, das ist aber nicht das Problem.)<br />
Es ist für den Borland C++ geschrieben, es wäre aber nett wenn es auch eine Verallgemeinerung gäbe, die mich von diesem Compiler etwas unabhängig macht.</p>
<blockquote>
<p>int pos,check[8];<br />
long length;<br />
char *buffer;<br />
Form1-&gt;OpenDialog1-&gt;Execute();<br />
Folder=OpenDialog1-&gt;FileName;<br />
pos=Folder.LastDelimiter(&quot;\&quot;);<br />
Folder=Folder.SubString(0,pos);</p>
<p>for (int a1=0;a1&lt;9;a1++)<br />
{<br />
check[a1]=FileOpen(Folder + Filenames[a1],0);<br />
}<br />
Memo1-&gt;Text= Folder;</p>
<p>//begin for1<br />
for (int a2=0;a2&lt;9;a2++)<br />
{<br />
if (check[a2]==-1)<br />
{<br />
Memo1-&gt;Lines-&gt;Add(&quot;Error on &quot; + Filenames[a2]);<br />
Textfiles[a2]=&quot;na&quot;;<br />
}<br />
else<br />
{<br />
Textfiles[a2]=IntToStr(check[a2]);<br />
}<br />
}<br />
//end of for1</p>
<p>for (int a=0;a&lt;9;a++)<br />
{<br />
Memo1-&gt;Lines-&gt;Add(Textfiles[a]);<br />
}<br />
length=filelength(check[0]);<br />
Textfiles[0]=Textfiles[0].LoadStr(check[0]);<br />
Textfiles[0]=(Textfiles[0] + buffer);<br />
Memo1-&gt;Lines-&gt;Add(IntToStr(length) + Textfiles[0]);<br />
}</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1009495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1009495</guid><dc:creator><![CDATA[Phat Looser]]></dc:creator><pubDate>Mon, 06 Mar 2006 09:40:28 GMT</pubDate></item><item><title><![CDATA[Reply to Laden von Dateien in Streams on Mon, 06 Mar 2006 09:42:46 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int pos,check[8];
long length;
char *buffer;
Form1-&gt;OpenDialog1-&gt;Execute();
Folder=OpenDialog1-&gt;FileName;
pos=Folder.LastDelimiter(&quot;\&quot;);
Folder=Folder.SubString(0,pos);

for (int a1=0;a1&lt;9;a1++)
{
check[a1]=FileOpen(Folder + Filenames[a1],0);
}
Memo1-&gt;Text= Folder;

//begin for1
for (int a2=0;a2&lt;9;a2++)
{
if (check[a2]==-1)
{
Memo1-&gt;Lines-&gt;Add(&quot;Error on &quot; + Filenames[a2]);
Textfiles[a2]=&quot;na&quot;;
}
else
{
Textfiles[a2]=IntToStr(check[a2]);
}
}
//end of for1

for (int a=0;a&lt;9;a++)
{
Memo1-&gt;Lines-&gt;Add(Textfiles[a]);
}
length=filelength(check[0]);
Textfiles[0]=Textfiles[0].LoadStr(check[0]);
Textfiles[0]=(Textfiles[0] + buffer);
Memo1-&gt;Lines-&gt;Add(IntToStr(length) + Textfiles[0]);
}
</code></pre>
<p>als zitat unschön zu lesen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1009497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1009497</guid><dc:creator><![CDATA[ser1al]]></dc:creator><pubDate>Mon, 06 Mar 2006 09:42:46 GMT</pubDate></item><item><title><![CDATA[Reply to Laden von Dateien in Streams on Mon, 06 Mar 2006 09:46:19 GMT]]></title><description><![CDATA[<p>Phat Looser schrieb:</p>
<blockquote>
<p>Es ist für den Borland C++ geschrieben, es wäre aber nett wenn es auch eine Verallgemeinerung gäbe, die mich von diesem Compiler etwas unabhängig macht.</p>
</blockquote>
<p>da wirst du dann mit deinem code garnicht weit kommen!</p>
<p>wenn du unabhängig von der ide arbeiten willst, dann mit standard c++!<br />
hier werden buttons, memos, dialoge benutzt die nicht standard c++ sind, sondern direkt von deiner ide kommen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1009500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1009500</guid><dc:creator><![CDATA[ser1al]]></dc:creator><pubDate>Mon, 06 Mar 2006 09:46:19 GMT</pubDate></item><item><title><![CDATA[Reply to Laden von Dateien in Streams on Mon, 06 Mar 2006 09:51:36 GMT]]></title><description><![CDATA[<p>Memo1-&gt;Lines-&gt;LoadFromFile(&quot;xxxx.txt&quot;);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1009503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1009503</guid><dc:creator><![CDATA[Christian211]]></dc:creator><pubDate>Mon, 06 Mar 2006 09:51:36 GMT</pubDate></item><item><title><![CDATA[Reply to Laden von Dateien in Streams on Mon, 06 Mar 2006 10:01:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<pre><code class="language-cpp">pos=Folder.LastDelimiter(&quot;\&quot;);
Folder=Folder.SubString(0,pos);
</code></pre>
<p>ist falsch. Ein \ muß maskiert werden und die Indizes bei AnsiString beginnen bei 1</p>
<pre><code class="language-cpp">pos=Folder.LastDelimiter(&quot;\\&quot;);
Folder=Folder.SubString(1,pos);
</code></pre>
<p>Dann liegen im ersten Quelltext einige Missverständnisse.<br />
Wo wird buffer initialisiert?<br />
FileOpen liefert ein Handle auf die geöffnete Datei zurück und nicht die Länge.<br />
AnsiString::LoadStr liest eine String aus einer StringRessource und nicht aus einer TextDatei. Hierfür wäre hier FileRead zuständig.<br />
usw.</p>
<p>Wie Christian aber schon bemerkte ist hier LoadFromFile sicher die einfachste variant.<br />
Wenn du BCB-unabhängiger programmieren möchtest, beschäftige dich mal mit iostreams. Dazu gibt es unter anderem ind der FAQ des C++-Forums eine Anleitung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1009516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1009516</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 06 Mar 2006 10:01:12 GMT</pubDate></item><item><title><![CDATA[Reply to Laden von Dateien in Streams on Mon, 06 Mar 2006 17:53:56 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Hallo,</p>
<pre><code class="language-cpp">pos=Folder.LastDelimiter(&quot;\&quot;);
Folder=Folder.SubString(0,pos);
</code></pre>
<p>ist falsch. Ein \ muß maskiert werden und die Indizes bei AnsiString beginnen bei 1</p>
<pre><code class="language-cpp">pos=Folder.LastDelimiter(&quot;\\&quot;);
Folder=Folder.SubString(1,pos);
</code></pre>
<p>Dann liegen im ersten Quelltext einige Missverständnisse.<br />
Wo wird buffer initialisiert?<br />
FileOpen liefert ein Handle auf die geöffnete Datei zurück und nicht die Länge.<br />
AnsiString::LoadStr liest eine String aus einer StringRessource und nicht aus einer TextDatei. Hierfür wäre hier FileRead zuständig.<br />
usw.</p>
<p>Wie Christian aber schon bemerkte ist hier LoadFromFile sicher die einfachste variant.<br />
Wenn du BCB-unabhängiger programmieren möchtest, beschäftige dich mal mit iostreams. Dazu gibt es unter anderem ind der FAQ des C++-Forums eine Anleitung.</p>
</blockquote>
<p>Das \\ steht richtig im Quelltext. Ich hab keinen Schimmer warum es hier nicht drinnensteht.<br />
Auch wenn bei mir eine 0 und keine 1 steht, funktioniert es. Irritierend, aber wahr. Ich probier die &quot;1&quot;. (Versuch: Es macht keinen Unterschied. Augenscheinlich korrigiert das der Compiler bei der ersten Stelle.)<br />
Buffer wird bis jetzt nirgendwo initalisiert. Das mit dem &quot;Char* buffer&quot; war nur der 9. Fehlgegangene Versuch. Ich guck mir das Tut an, versprochen. Trotzdem möchte ich selber auf die Nase fallen, das hilft mehr als jedes Tut. Besonders wenn man sich dann einen funktionierenden Quelltext anschaut und seine eigenen Fehler erkennt.<br />
Fileopen schreibt in &quot;check[x]&quot;, die lenth-Variable wird hier nur ausprobiert (filelength(check[0])); ich bin von 8 bis 0 durchgelaufen.<br />
Danke für die Hilfe.</p>
<p>P.S.:</p>
<blockquote>
<p>Memo1-&gt;Lines-&gt;LoadFromFile(&quot;xxxx.txt&quot;)</p>
</blockquote>
<p>Hehe, DAS wollte ich vermeiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1009965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1009965</guid><dc:creator><![CDATA[Phat Looser]]></dc:creator><pubDate>Mon, 06 Mar 2006 17:53:56 GMT</pubDate></item><item><title><![CDATA[Reply to Laden von Dateien in Streams on Tue, 07 Mar 2006 05:44:12 GMT]]></title><description><![CDATA[<blockquote>
<p>Zitat:<br />
Memo1-&gt;Lines-&gt;LoadFromFile(&quot;xxxx.txt&quot;)</p>
<p>Hehe, DAS wollte ich vermeiden.</p>
</blockquote>
<p>Warum einfach, wenn es auch kompliziert geht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1010207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1010207</guid><dc:creator><![CDATA[Christian211]]></dc:creator><pubDate>Tue, 07 Mar 2006 05:44:12 GMT</pubDate></item><item><title><![CDATA[Reply to Laden von Dateien in Streams on Tue, 07 Mar 2006 09:10:34 GMT]]></title><description><![CDATA[<p>In meiner Hilfe zu FileRead (BCB5) steht ein recht ausfühliches Beispiel. Schau doch da einfach mal rein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1010282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1010282</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 07 Mar 2006 09:10:34 GMT</pubDate></item><item><title><![CDATA[Reply to Laden von Dateien in Streams on Thu, 09 Mar 2006 09:54:14 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>In meiner Hilfe zu FileRead (BCB5) steht ein recht ausfühliches Beispiel. Schau doch da einfach mal rein.</p>
</blockquote>
<p>Werde ich brauchen.<br />
Aus welchen-Gründen-auch-immer komme ich mit den FileHandles nicht zurecht. Ich bekomme eins, aber wenn ich es verwende kommt immer &quot;-1&quot; heraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012292</guid><dc:creator><![CDATA[Phat Looser]]></dc:creator><pubDate>Thu, 09 Mar 2006 09:54:14 GMT</pubDate></item><item><title><![CDATA[Reply to Laden von Dateien in Streams on Thu, 09 Mar 2006 13:11:40 GMT]]></title><description><![CDATA[<p>Hast du das Beispiel denn nicht?<br />
Ich poste es jetzt mal hier.</p>
<pre><code class="language-cpp">void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int iFileHandle;
  int iFileLength;
  int iBytesRead;
  char *pszBuffer;
  if (OpenDialog1-&gt;Execute())
  {
    try
    {
      iFileHandle = FileOpen(OpenDialog1-&gt;FileName, fmOpenRead);
      iFileLength = FileSeek(iFileHandle,0,2);
      FileSeek(iFileHandle,0,0);
      pszBuffer = new char[iFileLength+1];
      iBytesRead = FileRead(iFileHandle, pszBuffer, iFileLength);
      FileClose(iFileHandle);

      for (int i=0;i&lt;iBytesRead;i++)
      {
        StringGrid1-&gt;RowCount += 1;
        StringGrid1-&gt;Cells[1][i+1] = pszBuffer[i];
        StringGrid1-&gt;Cells[2][i+1] = IntToStr((int)pszBuffer[i]);
      }
      delete [] pszBuffer;
    }
    catch(...)
    {
      Application-&gt;MessageBox(&quot;Can't perform one of the following file operations: Open, Seek, Read, Close.&quot;, &quot;File Error&quot;, IDOK);
    }
  }
}
</code></pre>
<p>Ich selbst verwende diese Funktionen normalerweise nicht, sondern statt dessen Standard-streams oder TFileStream.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012435</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 09 Mar 2006 13:11:40 GMT</pubDate></item></channel></rss>