<?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[Fehler(?!) von std::ifstream - Oder doch die Geschwindigkeit?]]></title><description><![CDATA[<p>Hallo,</p>
<p>bei meinem aktuellen Projekt lade ich zunächst eine Datei komplett in einen std::vector&lt;char&gt; data, um dann mit diesem weiterzuarbeiten.<br />
Nun ist mir aufgefallen, das data nach dem Laden der Datei keinerlei Daten enthält.<br />
Hier zunächst mein dazugehöriger Code:</p>
<pre><code class="language-cpp">bool SffV2::ReadFile(std::ifstream&amp; myfile,std::vector&lt;char&gt;&amp; data)
{
	data.clear();//superfluous but whatever
	int length;
	myfile.seekg(0,std::ios::end);
	length = myfile.tellg();
	if(length &gt; -1)//-&gt;no error
	{
		myfile.seekg(0,std::ios::beg);
		data.reserve(length);//changes vectorsize to &gt;=datalength
#ifdef DEBUG
		SetError(INFO,&quot;In Func:ReadFile vector data's length is-&quot;+error::IntToString(data.capacity()));
		SetError(INFO,&quot;Ifstream state is EOF:&quot;+error::IntToString(myfile.eof())+&quot;,BAD:&quot;+error::IntToString(myfile.bad()) + &quot;,Open:&quot;+ error::IntToString(myfile.is_open()));
#endif

				 myfile.read(&amp;data[0],length);
				 std::cout &lt;&lt; myfile.gcount() &lt;&lt; std::endl;
//...
//bissl debugausgabe weggelassen
}
</code></pre>
<p>Das letzte myfile.gcount() gibt aus, das die gesame Datei eingelesen worden ist(da es die exakte Länge der Datei anzeigt).<br />
Laut meinem Errorlogger hat weder der ifstream einen Fehler fabriziert(bad ==0) noch ist die Datei unerwartet &quot;am Ende&quot; gewesen(denn EOF == 0), auch ist sie direkt vor dem Lesen der Daten offen(is_open()==true).</p>
<p>Mein Errorlog der NACH der letzten hier geposteten Zeile kommt wird aufgerufen, daher habe ich angenommen, das myfile.read(...) abgeschlossen ist.<br />
Dennoch zeigt mir data.size() Null an.</p>
<p>Ich habe eben als Test mal die Daten einzeln via myfile.get() eingegeben und mir in jedem Schritt die gegenwärtige Bytenummer ausgeben lassen(also den index) und daraus konnte ich ersehen, dass das Auslesen der Daten seeeehr lange braucht.<br />
Etwa in der Höhe von &gt;100 Sekunden(!).<br />
Mache ich was falsch, oder ist das wirklich so langsam?</p>
<p>Und falls das Auslesen wirklich so langsam ist, wieso läuft der Code dann weiter?!</p>
<p>Vielen Dank für eure Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305741/fehler-von-std-ifstream-oder-doch-die-geschwindigkeit</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 19:59:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305741.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Jul 2012 03:31:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fehler(?!) von std::ifstream - Oder doch die Geschwindigkeit? on Sat, 07 Jul 2012 03:31:00 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>bei meinem aktuellen Projekt lade ich zunächst eine Datei komplett in einen std::vector&lt;char&gt; data, um dann mit diesem weiterzuarbeiten.<br />
Nun ist mir aufgefallen, das data nach dem Laden der Datei keinerlei Daten enthält.<br />
Hier zunächst mein dazugehöriger Code:</p>
<pre><code class="language-cpp">bool SffV2::ReadFile(std::ifstream&amp; myfile,std::vector&lt;char&gt;&amp; data)
{
	data.clear();//superfluous but whatever
	int length;
	myfile.seekg(0,std::ios::end);
	length = myfile.tellg();
	if(length &gt; -1)//-&gt;no error
	{
		myfile.seekg(0,std::ios::beg);
		data.reserve(length);//changes vectorsize to &gt;=datalength
#ifdef DEBUG
		SetError(INFO,&quot;In Func:ReadFile vector data's length is-&quot;+error::IntToString(data.capacity()));
		SetError(INFO,&quot;Ifstream state is EOF:&quot;+error::IntToString(myfile.eof())+&quot;,BAD:&quot;+error::IntToString(myfile.bad()) + &quot;,Open:&quot;+ error::IntToString(myfile.is_open()));
#endif

				 myfile.read(&amp;data[0],length);
				 std::cout &lt;&lt; myfile.gcount() &lt;&lt; std::endl;
//...
//bissl debugausgabe weggelassen
}
</code></pre>
<p>Das letzte myfile.gcount() gibt aus, das die gesame Datei eingelesen worden ist(da es die exakte Länge der Datei anzeigt).<br />
Laut meinem Errorlogger hat weder der ifstream einen Fehler fabriziert(bad ==0) noch ist die Datei unerwartet &quot;am Ende&quot; gewesen(denn EOF == 0), auch ist sie direkt vor dem Lesen der Daten offen(is_open()==true).</p>
<p>Mein Errorlog der NACH der letzten hier geposteten Zeile kommt wird aufgerufen, daher habe ich angenommen, das myfile.read(...) abgeschlossen ist.<br />
Dennoch zeigt mir data.size() Null an.</p>
<p>Ich habe eben als Test mal die Daten einzeln via myfile.get() eingegeben und mir in jedem Schritt die gegenwärtige Bytenummer ausgeben lassen(also den index) und daraus konnte ich ersehen, dass das Auslesen der Daten seeeehr lange braucht.<br />
Etwa in der Höhe von &gt;100 Sekunden(!).<br />
Mache ich was falsch, oder ist das wirklich so langsam?</p>
<p>Und falls das Auslesen wirklich so langsam ist, wieso läuft der Code dann weiter?!</p>
<p>Vielen Dank für eure Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230774</guid><dc:creator><![CDATA[Namenloser324]]></dc:creator><pubDate>Sat, 07 Jul 2012 03:31:00 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler(?!) von std::ifstream - Oder doch die Geschwindigkeit? on Sat, 07 Jul 2012 05:11:59 GMT]]></title><description><![CDATA[<p>Dateigröße ist übrigens ca. 900 KB, also eigentlich nicht sonderlich groß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230776</guid><dc:creator><![CDATA[Namenloser324]]></dc:creator><pubDate>Sat, 07 Jul 2012 05:11:59 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler(?!) von std::ifstream - Oder doch die Geschwindigkeit? on Sat, 07 Jul 2012 07:02:22 GMT]]></title><description><![CDATA[<p>Du änderst in dem gezeigten Code die Vectorgrösse nicht, warum sollte sie also ungleich 0 sein? Vielleicht solltest du resize statt reserve verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230779</guid><dc:creator><![CDATA[Manni66]]></dc:creator><pubDate>Sat, 07 Jul 2012 07:02:22 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler(?!) von std::ifstream - Oder doch die Geschwindigkeit? on Sat, 07 Jul 2012 13:23:33 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> verdammt, du hast recht. Und da dachte ich ich hätte in meiner C++ Abstinenz nicht vergessen^^ sehr gut, das es einfach dummheit war <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230833</guid><dc:creator><![CDATA[Namenloser324]]></dc:creator><pubDate>Sat, 07 Jul 2012 13:23:33 GMT</pubDate></item></channel></rss>