<?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[Dateien einlesen.]]></title><description><![CDATA[<p>Ich habe aus <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1009718.html#1009718" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1009718.html#1009718</a> das Beispiel genutzt um Dateien in vectoren einzulesen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;

using namespace std;

int main() {
  ifstream ifs(&quot;datei.txt&quot;);

  if (!ifs)
    return 1;

  vector&lt;unsigned char&gt; vec;
  char chr;

  while (ifs.good()) {  
    ifs.get(chr);
    vec.push_back(chr);
  }
        ShowMessage(&quot;size:&quot;+IntToStr(vec.size()));
        ShowMessage(&quot;capacity:&quot;+IntToStr(vec.capacity()));

  ifs.close();
  return 0;
}
</code></pre>
<p>Die Datei ist jetzt Original 209 KB (214.200 Bytes) (nicht Speicher auf HDD!!)<br />
size() sagt: 154299<br />
capacity() sagt: 262144</p>
<p>*nix peil*</p>
<p>1. Warum sind die Werte unterschiedlich<br />
2. Warum stimmen die Werte nicht mit den zu lesenden Bytes überein.</p>
<p>Eigentlich wollte ich statt</p>
<pre><code class="language-cpp">handle=_open(&quot;datei.txt&quot;,_O_RDONLY);
if (!handle) return;
unsigned char array = (unsigned char*) malloc(filesize+1);
_read(handle,&amp;array[0],filesize);
_close(handle);
</code></pre>
<p>das mit vectoren lösen, aber da passiert ja nur Quatsch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Etwas grundlegendes vergessen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/139752/dateien-einlesen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 19:21:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/139752.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 08 Mar 2006 22:15:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dateien einlesen. on Wed, 08 Mar 2006 22:15:54 GMT]]></title><description><![CDATA[<p>Ich habe aus <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1009718.html#1009718" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1009718.html#1009718</a> das Beispiel genutzt um Dateien in vectoren einzulesen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;

using namespace std;

int main() {
  ifstream ifs(&quot;datei.txt&quot;);

  if (!ifs)
    return 1;

  vector&lt;unsigned char&gt; vec;
  char chr;

  while (ifs.good()) {  
    ifs.get(chr);
    vec.push_back(chr);
  }
        ShowMessage(&quot;size:&quot;+IntToStr(vec.size()));
        ShowMessage(&quot;capacity:&quot;+IntToStr(vec.capacity()));

  ifs.close();
  return 0;
}
</code></pre>
<p>Die Datei ist jetzt Original 209 KB (214.200 Bytes) (nicht Speicher auf HDD!!)<br />
size() sagt: 154299<br />
capacity() sagt: 262144</p>
<p>*nix peil*</p>
<p>1. Warum sind die Werte unterschiedlich<br />
2. Warum stimmen die Werte nicht mit den zu lesenden Bytes überein.</p>
<p>Eigentlich wollte ich statt</p>
<pre><code class="language-cpp">handle=_open(&quot;datei.txt&quot;,_O_RDONLY);
if (!handle) return;
unsigned char array = (unsigned char*) malloc(filesize+1);
_read(handle,&amp;array[0],filesize);
_close(handle);
</code></pre>
<p>das mit vectoren lösen, aber da passiert ja nur Quatsch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Etwas grundlegendes vergessen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012082</guid><dc:creator><![CDATA[cianner]]></dc:creator><pubDate>Wed, 08 Mar 2006 22:15:54 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien einlesen. on Wed, 08 Mar 2006 22:58:38 GMT]]></title><description><![CDATA[<p>Hi!</p>
<blockquote>
<p><em>capacity</em> Returns the largest possible size of the vector.</p>
</blockquote>
<p>Warum willst du überhaupt einen Vector nehmen? Ich halt das für Unsinn... :-S</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012110</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Wed, 08 Mar 2006 22:58:38 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien einlesen. on Thu, 09 Mar 2006 01:09:11 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p><em>capacity</em> Returns the largest possible size of the vector.</p>
</blockquote>
<p>Das war wohl die Antwort auf die Frage: Was macht max_size(), oder?<br />
size() liefert die Anzahl der gespeicherten Elemente,<br />
capacity() die Anzahl von Elementen, die ohne Größenänderung des Vectors (also Speicherallokierung) gespeichert werden können. Drum ist size immer &lt;= capacity.</p>
<p>Ich weiss nicht was du mit den eingelesenen Daten sonst noch so vorhast, aber im zweiten Punkt muss ich David_pb recht geben ...</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012131</guid><dc:creator><![CDATA[Sepp Brannigan]]></dc:creator><pubDate>Thu, 09 Mar 2006 01:09:11 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien einlesen. on Thu, 09 Mar 2006 01:22:06 GMT]]></title><description><![CDATA[<p>vector vergrössert den speicherblock nicht jeweils nur um ein element. warum das so ist, wurde gerade erst diskutiert:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-138510.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-138510.html</a></p>
<p>vector muss keine schlechte wahl für diesen zweck sein, tatsächlich ist es sogar eine sehr gute wahl, allerdings nicht mit der obigen methode :p<br />
wenn du mit der C methode filesize bereits kennst, diese information im C++ dem vector aber vorenthälst, musst du dich über merkwürdigkeiten nicht wundern <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012132</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 09 Mar 2006 01:22:06 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien einlesen. on Thu, 09 Mar 2006 06:41:12 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3822">@Sepp</a> Brannigan:<br />
Danke für den Hinweis, du hast natürlich recht. Ich bin da wohl in der Zeile verrutscht! <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="😉"
    /></p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012162</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Thu, 09 Mar 2006 06:41:12 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien einlesen. on Thu, 09 Mar 2006 07:07:16 GMT]]></title><description><![CDATA[<p>Und was den Unterschied zwischen Dateigröße und Vektorgröße angeht - Such mal im Forum nach Textfile vs. Binärfile <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 />
(im Klartext: Zeilenwechsel im File speichert Windows als \r\n = 2 Byte, C wandelt die um in \n = 1 Byte)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012170</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 09 Mar 2006 07:07:16 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien einlesen. on Fri, 10 Mar 2006 08:17:39 GMT]]></title><description><![CDATA[<p>Alternativ wollte ich das <strong>new</strong> verwendet, aber auch da habe ich leider meine Probleme mit.</p>
<p>C Version</p>
<pre><code>unsigned char *variable = (unsigned char*) malloc(filesize+1);
read(handle,&amp;variable[0],filesize);
free (variable);
</code></pre>
<p>C++ mit <strong>new</strong></p>
<pre><code class="language-cpp">unsigned char *variable = new unsigned char(filesize+1);
read(handle,&amp;variable[0],filesize);
delete[] variable;
</code></pre>
<p>Ergebnis: Crash in read() <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>C++ mit auto_ptr</p>
<pre><code class="language-cpp">auto_ptr&lt;unsigned char&gt; variable( new unsigned char(filesize) );
read(handle,&amp;variable[0],filesize);
</code></pre>
<p>Ergebnis: Binaerer Operator '[' : 'class std::auto_ptr&lt;unsigned char&gt;' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht</p>
<p>Ich wüsste jetzt natürlich gerne warum new und auto_ptr nicht funktionieren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013015</guid><dc:creator><![CDATA[cianner]]></dc:creator><pubDate>Fri, 10 Mar 2006 08:17:39 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien einlesen. on Fri, 10 Mar 2006 08:27:53 GMT]]></title><description><![CDATA[<p>cianner schrieb:</p>
<blockquote>
<p>C++ mit <strong>new</strong></p>
<pre><code class="language-cpp">unsigned char *variable = new unsigned char(filesize+1);
read(handle,&amp;variable[0],filesize);
delete[] variable;
</code></pre>
<p>Ergebnis: Crash in read() <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>...</p>
<p>Ich wüsste jetzt natürlich gerne warum new und auto_ptr nicht funktionieren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Deine new-Version erzeugt EIN char mit dem Wert '(filesize+1)%256', um ein Array von chars anzulegen, benötigst du eckige Klammern:</p>
<pre><code class="language-cpp">unsigned char* variable = new unsigned char[filesize+1];
</code></pre>
<p>(und auto_ptr ist sowieso nur für Solo-Objekte vorgesehen - schau dir doch mal Boost's scoped_array an)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013019</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 10 Mar 2006 08:27:53 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien einlesen. on Fri, 10 Mar 2006 08:58:19 GMT]]></title><description><![CDATA[<p>Danke! Nachdem ich den Text abgesendet hatte, ist mir das auch aufgefallen, ich wollte aber nicht direkt auf den Beitrag gleich antworten.</p>
<p>Ich habe mir mal boost_1_33_1 raufgehauen.</p>
<pre><code class="language-cpp">#include &quot;boost/scoped_ptr.hpp&quot; 
using namespace boost;

scoped_ptr&lt;unsigned char&gt; variable(new unsigned char[filesize+1]); 
read(handle,&amp;variable[0],filesize);
</code></pre>
<p>Ergebnis: Binaerer Operator '[' : 'class boost::scoped_ptr&lt;unsigned char&gt;' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013043</guid><dc:creator><![CDATA[cianner]]></dc:creator><pubDate>Fri, 10 Mar 2006 08:58:19 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien einlesen. on Fri, 10 Mar 2006 09:12:23 GMT]]></title><description><![CDATA[<p>scoped_<strong>ptr</strong> ist ja ebenfalls für Solo-Objekte gedacht - ich sagte vorhin scoped_<strong>array</strong> (und der hat auch einen Subscript-Operator).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013052</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 10 Mar 2006 09:12:23 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien einlesen. on Fri, 10 Mar 2006 09:19:49 GMT]]></title><description><![CDATA[<p>Vielen Dank!! Scheisse wenn man nicht lesen kann <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 />
Jetzt muss ich doch gleich ne Zusatzfrage stellen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Ich will die <strong>variable</strong> in einer Klasse definieren.<br />
Als <strong>new</strong> würde man das so machen</p>
<pre><code class="language-cpp">class bla
{
private:
unsigned char *variable;
}

bla:bla()
{
long filesize = ......
variable = new unsigned char[filesize+1];
}
</code></pre>
<p>Wie müsste das bei scoped_array() ausschauen? Ich bekomme es absolut nicht hin zu teilen *zu blöd dafür bin*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013059</guid><dc:creator><![CDATA[cianner]]></dc:creator><pubDate>Fri, 10 Mar 2006 09:19:49 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien einlesen. on Fri, 10 Mar 2006 09:34:40 GMT]]></title><description><![CDATA[<p>In dem Fall mußt du wohl die Initialisierungsliste des Ctors verwenden:</p>
<pre><code class="language-cpp">class test
{
public:
  test(int fsize) : filsize(fsize), filedata(new unsigned char[fsize+1]
  {
    ...
  }
private:
  int filesize;
  scoped_array&lt;unsigned char&gt; filedata;
  //bei näherem Überlegen: hier wäre ein shared_array wohl hilfreicher
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1013073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013073</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 10 Mar 2006 09:34:40 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien einlesen. on Fri, 10 Mar 2006 09:59:23 GMT]]></title><description><![CDATA[<p>Das sind um die 30 Variablen die ich benötige, die müssen alle so initialisiert werden? *igh*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013093</guid><dc:creator><![CDATA[cianner]]></dc:creator><pubDate>Fri, 10 Mar 2006 09:59:23 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien einlesen. on Fri, 10 Mar 2006 10:06:51 GMT]]></title><description><![CDATA[<p>Argh ich wollte doch &quot;Vorschau&quot; anklickern.</p>
<p>Anders gefragt... dieser Zweizeiler:</p>
<pre><code class="language-cpp">unsigned char *variable;
variable = new unsigned char[filesize+1];
</code></pre>
<p>müsste bitte wie für scoped_array aussschauen?</p>
<pre><code class="language-cpp">scoped_array&lt;unsigned char&gt; variable;
variable(new unsigned char[filesize+1]);
</code></pre>
<p>Hier meckert er ja das es keine Funktion ist. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Und warum sollte shared_array besser geeignet sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013102</guid><dc:creator><![CDATA[cianner]]></dc:creator><pubDate>Fri, 10 Mar 2006 10:06:51 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien einlesen. on Fri, 10 Mar 2006 10:06:51 GMT]]></title><description><![CDATA[<p>30 Variablen? Was soll denn das werden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013101</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 10 Mar 2006 10:06:51 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien einlesen. on Fri, 10 Mar 2006 10:09:55 GMT]]></title><description><![CDATA[<p>scoped_array's besitzen keinen Zuweisungsoperator (und erst recht keinen op()), also mußt du sie direkt beim Erzeugen initialisieren:</p>
<pre><code class="language-cpp">scoped_array&lt;char&gt; var(new char[size+1];
</code></pre>
<p>(und shared_arrays haben den Vorteil, daß sie Referenzzählung und Kopier-Operationen unterstützen)</p>
<p>PS: Im Magazin gibt es übrigens einen Artikel über die ganzen Boost-Smartpointer - den solltest du dir mal durchlesen <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013106</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 10 Mar 2006 10:09:55 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien einlesen. on Fri, 10 Mar 2006 10:28:04 GMT]]></title><description><![CDATA[<p>Schade, dann nehme ich lieber die new/delete methode oder bleibe gleich beim Original. Das macht dann auch keinen wirklichen Unterschied.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013126</guid><dc:creator><![CDATA[cianner]]></dc:creator><pubDate>Fri, 10 Mar 2006 10:28:04 GMT</pubDate></item></channel></rss>