<?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[problem mit ifstream]]></title><description><![CDATA[<p>Hi, ich habe folgendes komisches Verhalten (Visual Studio 2005):</p>
<p>ich habe eine Klassenvariable<br />
ifstream m_file</p>
<p>ich öffne ein file<br />
m_file.open(dateiname)<br />
und lese mit<br />
getline(m_file,line)<br />
die Datei aus</p>
<p>am Ende<br />
schließe ich mit<br />
m_file.close();</p>
<p>durch ein externes Ereignis wird das ganze wiederholt.<br />
Allerdings schlägt gleich das Zeile auslesen fehlt.</p>
<p>irgendwie ist der Stream scheinbar kaputt.<br />
wenn ich die internen zustände nach dem ersten und dem zweiten Öffnen vergleiche, gibt es Unterschiede zB _MyState (oder so ähnlich)</p>
<p>Ist das ein Bug in der STL-implementierung?</p>
<p>zusammengefasst sieht der Ablauf also so aus:</p>
<pre><code class="language-cpp">ifstream file;
file.open(&quot;test.txt&quot;);
string line;
while( getline(file, line) )
{
  // machwas
  cout &lt;&lt; line &lt;&lt; endl;
}
file.close();
file.open(&quot;test.txt&quot;);
while( getline(file, line) )     
{                              
  // machnochwas              // wird nie aufgerufen getline scheitert
  cout &lt;&lt; line &lt;&lt; endl;
}
</code></pre>
<p>Edit:<br />
fehlendes e eingefügt<br />
cout eingefügt</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/282918/problem-mit-ifstream</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 21:52:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/282918.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Mar 2011 11:56:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 12:40:52 GMT]]></title><description><![CDATA[<p>Hi, ich habe folgendes komisches Verhalten (Visual Studio 2005):</p>
<p>ich habe eine Klassenvariable<br />
ifstream m_file</p>
<p>ich öffne ein file<br />
m_file.open(dateiname)<br />
und lese mit<br />
getline(m_file,line)<br />
die Datei aus</p>
<p>am Ende<br />
schließe ich mit<br />
m_file.close();</p>
<p>durch ein externes Ereignis wird das ganze wiederholt.<br />
Allerdings schlägt gleich das Zeile auslesen fehlt.</p>
<p>irgendwie ist der Stream scheinbar kaputt.<br />
wenn ich die internen zustände nach dem ersten und dem zweiten Öffnen vergleiche, gibt es Unterschiede zB _MyState (oder so ähnlich)</p>
<p>Ist das ein Bug in der STL-implementierung?</p>
<p>zusammengefasst sieht der Ablauf also so aus:</p>
<pre><code class="language-cpp">ifstream file;
file.open(&quot;test.txt&quot;);
string line;
while( getline(file, line) )
{
  // machwas
  cout &lt;&lt; line &lt;&lt; endl;
}
file.close();
file.open(&quot;test.txt&quot;);
while( getline(file, line) )     
{                              
  // machnochwas              // wird nie aufgerufen getline scheitert
  cout &lt;&lt; line &lt;&lt; endl;
}
</code></pre>
<p>Edit:<br />
fehlendes e eingefügt<br />
cout eingefügt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028092</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Tue, 01 Mar 2011 12:40:52 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 12:02:16 GMT]]></title><description><![CDATA[<p>Vielleicht hilft ja ein file.clear() zwischendurch, falls das eof-flag noch gesetzt ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028095</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 01 Mar 2011 12:02:16 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 12:06:06 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>ich habe eine Klassenvariable<br />
ifstream m_file</p>
</blockquote>
<p>Ist das eine Membervariable, weil du wirklich eine Datei über einen einzelnen Methodenaufruf hinweg offenhalten musst? Oder gibt es die nur, weil du hier und da eine Datei einlesen musst und dir jeweils die Definition einer lokalen Variablen ersparen wolltest?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028098</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 01 Mar 2011 12:06:06 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 12:24:37 GMT]]></title><description><![CDATA[<p>MFK schrieb:</p>
<blockquote>
<p>Ist das eine Membervariable, weil du wirklich eine Datei über einen einzelnen Methodenaufruf hinweg offenhalten musst?</p>
</blockquote>
<p>ja<br />
Eine Callbackfunktion einer Klasse wird zyklisch aufgerufen und schickt bei jedem Aufruf eine weitere Zeile.</p>
<p>Unter bestimmten Umtänden soll das ganze resettet werden und von vorn beginnen.<br />
eventuell aber auch mit einer anderen Datei.</p>
<p>MFK schrieb:</p>
<blockquote>
<p>Oder gibt es die nur, weil du hier und da eine Datei einlesen musst und dir jeweils die Definition einer lokalen Variablen ersparen wolltest?</p>
</blockquote>
<p>nein.</p>
<p>Aber das ist ja nicht der Kern der sache.<br />
Das gepostete Minimalbesipiel zeigt das ganze ja auch (wenn man das fehlende e noch einfügt)</p>
<p>Decimad schrieb:</p>
<blockquote>
<p>Vielleicht hilft ja ein file.clear() zwischendurch, falls das eof-flag noch gesetzt ist...</p>
</blockquote>
<p>hilft auch nix.</p>
<p>Ich hab auch schon ein seekg(0) probiert</p>
<p>Ich habs jetzt erst mal so gelöst, dass ich das member als Pointer eingebunden habe und ein komplett neues Objekt erzeuge.</p>
<p>Aber mich würde dennoch die Ursache oder eine Lösung des ursprünglichen Problemes interessieren.</p>
<p>Edit:<br />
kann das denn jemand mit einem anderen compiler nachvollziehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028109</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Tue, 01 Mar 2011 12:24:37 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 12:35:17 GMT]]></title><description><![CDATA[<p>Bei mir funktionockelt das wunderbar (vs2010). Aber auch Vs2005 würde ich das zutrauen. Ich könnte mir vorstellen, dass der Fehler irgendwo anders vergraben liegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028117</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 01 Mar 2011 12:35:17 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 12:39:39 GMT]]></title><description><![CDATA[<p>Decimad schrieb:</p>
<blockquote>
<p>Bei mir funktionockelt das wunderbar (vs2010). Aber auch Vs2005 würde ich das zutrauen. Ich könnte mir vorstellen, dass der Fehler irgendwo anders vergraben liegt.</p>
</blockquote>
<p>Naja, ich habe genau oben geposteten Code in eine leere main gepackt.<br />
das 2. while überspringt er komplett.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028121</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Tue, 01 Mar 2011 12:39:39 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 12:41:53 GMT]]></title><description><![CDATA[<p>Und welche Error-Flags sind anschließend gesetzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028122</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 01 Mar 2011 12:41:53 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 12:42:16 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>Naja, ich habe genau oben geposteten Code in eine leere main gepackt.<br />
das 2. while überspringt er komplett.</p>
</blockquote>
<p>Auch mit einem file.clear() zwischen close und open?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028123</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 01 Mar 2011 12:42:16 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 12:46:35 GMT]]></title><description><![CDATA[<p>MFK schrieb:</p>
<blockquote>
<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>Naja, ich habe genau oben geposteten Code in eine leere main gepackt.<br />
das 2. while überspringt er komplett.</p>
</blockquote>
<p>Auch mit einem file.clear() zwischen close und open?</p>
</blockquote>
<p>ja.<br />
auch wenns nach dem Open gemacht wird -&gt; keine Auswirkung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028127</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Tue, 01 Mar 2011 12:46:35 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 12:54:05 GMT]]></title><description><![CDATA[<p>Also was ich ausprobiert habe, sah jetzt so aus:</p>
<pre><code class="language-cpp">int main(int argc, char* argv[])
{
	std::ifstream file;

	file.open(&quot;test.txt&quot;);
	std::string line;
	while( std::getline(file, line) )
	{
	  std::cout &lt;&lt; line &lt;&lt; '\n';
	}	
	file.close();

	std::cout &lt;&lt; '\n';

	file.open(&quot;test.txt&quot;);
	while( getline(file, line) )    
	{                              
		std::cout &lt;&lt; line &lt;&lt; '\n';
	}
	file.close();

	return 0;
}
</code></pre>
<p>... und rattert mir wie erwartet zweimal die Datei auf die Konsole.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028134</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 01 Mar 2011 12:54:05 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 12:59:42 GMT]]></title><description><![CDATA[<p>Ah, ok.<br />
**<br />
Das clear löst das Problem doch.**</p>
<p>Ich hatte erst im Testprogramm vergessen, im 2. open einen gültigen Pfad anzugeben und danach das zwischenzeitlich eingefügte seek zu entfernen, dass ich auch noch vor dem open eingefügt hatte.</p>
<p>Danke Leute!</p>
<p>edit:<br />
aber ohne das clear gehts wirklich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028135</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Tue, 01 Mar 2011 12:59:42 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 13:01:24 GMT]]></title><description><![CDATA[<p>Möge der Stream mit uns sein!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028138</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 01 Mar 2011 13:01:24 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 14:10:52 GMT]]></title><description><![CDATA[<p>Mögen die Leute endlich lernen, dass Streams RAII können. Ist ja schrecklich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028186</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 01 Mar 2011 14:10:52 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 14:15:32 GMT]]></title><description><![CDATA[<p>PiOhneKomma: Nun nicht so hart sein, das war sein runtergestripptes Beispiel, dass wohl bei n Durchläufen zumindest mal die File-Pointer-Position als Zustand mitschleift oder so ähnlich, wir haben ja gar nicht so genau gesehen, was er nun dort tut. Sicherlich ginge das natürlich auch mit RAII und nem auto_ptr auf dem Heap <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/2028190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028190</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 01 Mar 2011 14:15:32 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 14:16:07 GMT]]></title><description><![CDATA[<p>Wozu nen auto_ptr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028191</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 01 Mar 2011 14:16:07 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 14:17:10 GMT]]></title><description><![CDATA[<p>Na um bloß keine Leaks zu bekommen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028192</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 01 Mar 2011 14:17:10 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 14:18:30 GMT]]></title><description><![CDATA[<p>Wo willst du denn da Leaks bekommen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028195</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 01 Mar 2011 14:18:30 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 14:19:36 GMT]]></title><description><![CDATA[<p>Löschen bitte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028196</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 01 Mar 2011 14:19:36 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 14:19:20 GMT]]></title><description><![CDATA[<p>Na auf dem Heap!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028197</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 01 Mar 2011 14:19:20 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 14:20:31 GMT]]></title><description><![CDATA[<p>Ich sehe keine Heap-Allokationen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028198</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 01 Mar 2011 14:20:31 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 14:21:08 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Wo willst du denn da Leaks bekommen?</p>
</blockquote>
<p>Wenn du mal nicht nur auf deine reflexauslösenden Schlüsselwörter reagieren, sondern den Thread auch mal genau lesen würdest, würdest du sehen, dass man hier für RAII einen Smartpointer braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028199</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 01 Mar 2011 14:21:08 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 14:23:48 GMT]]></title><description><![CDATA[<p>Du hast Recht, habe mir nur den Code im Thread angesehen. Sorry.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028202</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 01 Mar 2011 14:23:48 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 15:05:52 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Mögen die Leute endlich lernen, dass Streams RAII können. Ist ja schrecklich.</p>
</blockquote>
<p>was ist damit gemeint?<br />
was hat das mit meinem Problem zu tun?</p>
<p>wenn damit gemeint ist, dass ich einen Stream auch nur für eine Datei benutzten sollte, dürfte die Klasse kein open und close anbieten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028229</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Tue, 01 Mar 2011 15:05:52 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 15:23:11 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>Mögen die Leute endlich lernen, dass Streams RAII können. Ist ja schrecklich.</p>
</blockquote>
<p>was ist damit gemeint?<br />
was hat das mit meinem Problem zu tun?</p>
<p>wenn damit gemeint ist, dass ich einen Stream auch nur für eine Datei benutzten sollte, dürfte die Klasse kein open und close anbieten.</p>
</blockquote>
<p>Ich finde auch, Du solltest open und close gar nicht benutzen.</p>
<p>Um die Stream-Variable lokaler zu machen, setze ich einen eigenen Block.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028236</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 01 Mar 2011 15:23:11 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 15:25:23 GMT]]></title><description><![CDATA[<p>Hab ich das jetzt richtig verstanden und man solte es so machen?</p>
<pre><code class="language-cpp">int main() {
    {
    	std::ifstream file(&quot;test.txt&quot;);
		std::string line;
		while( std::getline(file, line) )
		{
		  std::cout &lt;&lt; line &lt;&lt; '\n';
		}

		std::cout &lt;&lt; '\n';
    }

    {
    	std::ifstream file(&quot;test.txt&quot;);
		std::string line;
		while( std::getline(file, line) )
		{
		  std::cout &lt;&lt; line &lt;&lt; '\n';
		}

		std::cout &lt;&lt; '\n';
    }

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2028238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028238</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Tue, 01 Mar 2011 15:25:23 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit ifstream on Tue, 01 Mar 2011 15:30:27 GMT]]></title><description><![CDATA[<p>Du hast Volkard teilweise richtig verstanden, allerdings sagte er nicht, dass &quot;man&quot; es so tun sollte, sondern nur, dass er es so macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028240</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 01 Mar 2011 15:30:27 GMT</pubDate></item></channel></rss>