<?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[einlesen einer Datei; Dateiende erkenne mit EOF()]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich lese eine datei ein und versende diese über einen socket. ich lese solange bis EOF() bzw. ein Fehler auftritt(BAD(), FAIL()). Allerdings läuft die Routine dann in einem LOOP. scheinbar tritt nie EOF ein.</p>
<p>Frage, warum ist das so?</p>
<pre><code class="language-cpp">while(!myFile.eof() &amp;&amp; !myFile.bad() &amp;&amp; !myFile.fail() )
			{
				/*Exakte Anzahl an Bytes senden und nicht volle Buffergröße */
				if(restToBeSend &gt; SND_RCV_BUFFER_SIZE)
				{
					myFile.read(sendBuffer, usualSizeToSend);
					totalSend += send(sendSocket, sendBuffer, SND_RCV_BUFFER_SIZE, 0);
				}
				else if(restToBeSend &gt; 0)
				{
					myFile.read(sendBuffer, restToBeSend);
					totalSend += send(sendSocket, sendBuffer, restToBeSend, 0);
				}

				std::cout&lt;&lt;sendBuffer&lt;&lt;&quot;\n &lt;BREAK&gt; \n&quot;&lt;&lt;std::endl;

				restToBeSend = sizeOfFile - totalSend;
			}
</code></pre>
<p>Könnte es daran liegen, dass ich nur solange lese bis restToBeSend = 0 ist und damit verhindere das mein fstream File das EOF() Flag auf true setzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/173283/einlesen-einer-datei-dateiende-erkenne-mit-eof</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 06:39:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/173283.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Feb 2007 17:43:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to einlesen einer Datei; Dateiende erkenne mit EOF() on Tue, 13 Feb 2007 17:43:56 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich lese eine datei ein und versende diese über einen socket. ich lese solange bis EOF() bzw. ein Fehler auftritt(BAD(), FAIL()). Allerdings läuft die Routine dann in einem LOOP. scheinbar tritt nie EOF ein.</p>
<p>Frage, warum ist das so?</p>
<pre><code class="language-cpp">while(!myFile.eof() &amp;&amp; !myFile.bad() &amp;&amp; !myFile.fail() )
			{
				/*Exakte Anzahl an Bytes senden und nicht volle Buffergröße */
				if(restToBeSend &gt; SND_RCV_BUFFER_SIZE)
				{
					myFile.read(sendBuffer, usualSizeToSend);
					totalSend += send(sendSocket, sendBuffer, SND_RCV_BUFFER_SIZE, 0);
				}
				else if(restToBeSend &gt; 0)
				{
					myFile.read(sendBuffer, restToBeSend);
					totalSend += send(sendSocket, sendBuffer, restToBeSend, 0);
				}

				std::cout&lt;&lt;sendBuffer&lt;&lt;&quot;\n &lt;BREAK&gt; \n&quot;&lt;&lt;std::endl;

				restToBeSend = sizeOfFile - totalSend;
			}
</code></pre>
<p>Könnte es daran liegen, dass ich nur solange lese bis restToBeSend = 0 ist und damit verhindere das mein fstream File das EOF() Flag auf true setzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228293</guid><dc:creator><![CDATA[Joachim2006]]></dc:creator><pubDate>Tue, 13 Feb 2007 17:43:56 GMT</pubDate></item><item><title><![CDATA[Reply to einlesen einer Datei; Dateiende erkenne mit EOF() on Tue, 13 Feb 2007 18:40:54 GMT]]></title><description><![CDATA[<p>Bin noch kein C++ Programmierer und kapiere nicht den gesamten Quelltext.<br />
Aber deine while-Schleife wird nur dann beendet, wenn EOF erreicht ist und ein Fehler bad() und und ein Fehler fail() auftritt.<br />
Gehört dort vielleicht ein oder (||) hin?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228308</guid><dc:creator><![CDATA[onoz]]></dc:creator><pubDate>Tue, 13 Feb 2007 18:40:54 GMT</pubDate></item><item><title><![CDATA[Reply to einlesen einer Datei; Dateiende erkenne mit EOF() on Tue, 13 Feb 2007 18:52:52 GMT]]></title><description><![CDATA[<blockquote>
<p>Gehört dort vielleicht ein oder (||) hin?</p>
</blockquote>
<p>Jop, er hat Recht. In deinem Fall überprüfst du ob das Dateiende erreicht ist UND bad () UND fail () eintritt. Es müsste natürlich so heisen:</p>
<pre><code class="language-cpp">while(!myFile.eof() || !myFile.bad() || !myFile.fail() )
</code></pre>
<p>while(!myFile.eof () ODER !myFile.bad () ODER !myFile.fail ()) <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>MfG mikey.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228320</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Tue, 13 Feb 2007 18:52:52 GMT</pubDate></item><item><title><![CDATA[Reply to einlesen einer Datei; Dateiende erkenne mit EOF() on Tue, 13 Feb 2007 19:41:45 GMT]]></title><description><![CDATA[<p>hm...nö</p>
<p>ich frage ja auf ungleich ab. solange alle 3 bits auf FALSE sind also. sobald ein bit (eof, fail oder bad) auf true geht wird beendet. scheint mir richtig zu sein, wobei es in diesem fall auch mit || geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228343</guid><dc:creator><![CDATA[Joachim2006]]></dc:creator><pubDate>Tue, 13 Feb 2007 19:41:45 GMT</pubDate></item><item><title><![CDATA[Reply to einlesen einer Datei; Dateiende erkenne mit EOF() on Tue, 13 Feb 2007 20:58:38 GMT]]></title><description><![CDATA[<blockquote>
<p>hm...nö</p>
</blockquote>
<p>Was ?!</p>
<blockquote>
<p>scheint mir richtig zu sein, wobei es in diesem fall auch mit || geht.</p>
</blockquote>
<p>Sorry, aber jetzt verstehe ich nichts mehr. Um was geht es dir letztendlich ? Hats geklappt, so wie du es wolltest ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228380</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Tue, 13 Feb 2007 20:58:38 GMT</pubDate></item><item><title><![CDATA[Reply to einlesen einer Datei; Dateiende erkenne mit EOF() on Tue, 13 Feb 2007 21:06:18 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also mit der Und-Verknüpfung ist das schon richtig, das Oder ist falsch. Denn wenn dann eof() wahr ist, heißt dass dann bei &quot;oder&quot; noch lange nicht, dass die schleife abgebrochen wird <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>Was sonst falsch sein könnte, weiß ich aber auch nicht <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>Beste Grüße<br />
Jan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228383</guid><dc:creator><![CDATA[LeGaN]]></dc:creator><pubDate>Tue, 13 Feb 2007 21:06:18 GMT</pubDate></item><item><title><![CDATA[Reply to einlesen einer Datei; Dateiende erkenne mit EOF() on Tue, 13 Feb 2007 21:41:16 GMT]]></title><description><![CDATA[<blockquote>
<p>also mit der Und-Verknüpfung ist das schon richtig, das Oder ist falsch. Denn wenn dann eof() wahr ist, heißt dass dann bei &quot;oder&quot; noch lange nicht, dass die schleife abgebrochen wird</p>
</blockquote>
<p>Ähm warum ? Wäre es eine UND Verknüpfung, dann müssten alle Werte true sein, damit sie abgebrochen wird. Und bei einer ODER Verknüpfung genügt nur ein true als Abbruchbedingung, oder sehe ich das falsch ?</p>
<p>Edit: Huch, ich hab mal das Beispiel durchkompiliert. Ich verstehe jetzt garnichts mehr -.- Mit den UND Verknüpfungen läuft die Schleife korrekt bis eof () und mit den ODER Verknüpfungen passiert irgendwie garnix, er bleibt in der Schleife stecken. Könnte mich da mal jemand aufklären ?!</p>
<p>Edit:</p>
<blockquote>
<p>Denn wenn dann eof() wahr ist, heißt dass dann bei &quot;oder&quot; noch lange nicht, dass die schleife abgebrochen wird</p>
</blockquote>
<p>Warum ? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1228401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228401</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Tue, 13 Feb 2007 21:41:16 GMT</pubDate></item><item><title><![CDATA[Reply to einlesen einer Datei; Dateiende erkenne mit EOF() on Tue, 13 Feb 2007 21:59:36 GMT]]></title><description><![CDATA[<p>mikey schrieb:</p>
<blockquote>
<p>Könnte mich da mal jemand aufklären ?!</p>
</blockquote>
<p>Schleifen sollen laufen und nicht abbrechen.</p>
<p>Deshalb formuliert man Laufbedingungen und nicht Abbruchbedingungen.</p>
<p>Klingt vielleicht blöde, aber auf das obige Beispiel übertragen heisst das :</p>
<pre><code class="language-cpp">// läuft wenn !myFile.eof() UND !myFile.bad() UND !myFile.fail()
while(!myFile.eof() &amp;&amp; !myFile.bad() &amp;&amp; !myFile.fail() )

// läuft wenn !myFile.eof() ODER !myFile.bad() ODER !myFile.fail()
while(!myFile.eof() || !myFile.bad() || !myFile.fail() )
</code></pre>
<p>Alles klar ? <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/1228420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228420</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 13 Feb 2007 21:59:36 GMT</pubDate></item><item><title><![CDATA[Reply to einlesen einer Datei; Dateiende erkenne mit EOF() on Tue, 13 Feb 2007 22:16:00 GMT]]></title><description><![CDATA[<blockquote>
<p>Deshalb formuliert man Laufbedingungen und nicht Abbruchbedingungen.</p>
</blockquote>
<p>Stimmt so könnte man es auch sagen, ich habe mich falsch formuliert natürlich weis ich das <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="😉"
    /> Aber in diesem Zusammenhang habe ich es tatsächlich völlig falsch verstanden, wie mir gerade an deinem Beispielcode bewusst gworden ist. Aber jetzt raffs ich , danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228427</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Tue, 13 Feb 2007 22:16:00 GMT</pubDate></item><item><title><![CDATA[Reply to einlesen einer Datei; Dateiende erkenne mit EOF() on Wed, 14 Feb 2007 07:07:06 GMT]]></title><description><![CDATA[<p>Warum machst du überhaupt eine so komplizierte Abbruchbedingung? Ein einfaches <code>while(myFile.good())</code> oder <code>while(!myFile.fail())</code> reicht völlig aus (good() liefert true, wenn keines der Fehlerflags gesetzt ist; fail() fängt per Definition auch schwere Fehler und EOF ab).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228481</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 14 Feb 2007 07:07:06 GMT</pubDate></item><item><title><![CDATA[Reply to einlesen einer Datei; Dateiende erkenne mit EOF() on Wed, 14 Feb 2007 08:17:00 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Warum machst du überhaupt eine so komplizierte Abbruchbedingung? Ein einfaches <code>while(myFile.good())</code> oder <code>while(!myFile.fail())</code> reicht völlig aus.</p>
</blockquote>
<p>... oder auch einfach 'while(myFile)'. <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/1228520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228520</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Wed, 14 Feb 2007 08:17:00 GMT</pubDate></item><item><title><![CDATA[Reply to einlesen einer Datei; Dateiende erkenne mit EOF() on Wed, 14 Feb 2007 11:32:19 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Warum machst du überhaupt eine so komplizierte Abbruchbedingung? Ein einfaches <code>while(myFile.good())</code> oder <code>while(!myFile.fail())</code> reicht völlig aus.</p>
</blockquote>
<p>... oder auch einfach 'while(myFile)'. <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>
</blockquote>
<p>werd ich mal versuchen, der gedanke hat was.</p>
<p>allerding hab ich mein problem gelöst, auch wenn ich es noch nicht 100% verstehe.</p>
<p>da ich aus der datei lesen und das gelesene via socket versenden möchte, muss ich auch immer die information haben, wieviel ich gelesen hab(um genausovie zu versenden).<br />
das wird beim dateiende interessant, da ich da nicht zwangsläufig in der vollen buffergröße noch daten übrig hab. deswegen lese exakt soviele bytes wie in der datei vorhanden sind, beim dateiende kann das weniger sein als in den buffer max. reinpasst.</p>
<p>Mein Problem war(vermutlich) das ich durch das exakte lese der byte anzahl den fstream die chance genommen hab das EOF() festzustellen.</p>
<p>habe jezt einfach eine if-abfrage eingebaut, die prüft ob die restliche Anzahl zu lesender Bytes == 0 ist, wenn dies der Fall ist führe ich ein Pseudo-Read durch in der Länge 1. Jetzt stellt die fstream file EOF()fest und die schleife wird beendet.(ist zumindest meine these, bitte korrigieren falls ich falsch liege)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228624</guid><dc:creator><![CDATA[Jochim2006]]></dc:creator><pubDate>Wed, 14 Feb 2007 11:32:19 GMT</pubDate></item><item><title><![CDATA[Reply to einlesen einer Datei; Dateiende erkenne mit EOF() on Wed, 14 Feb 2007 11:56:39 GMT]]></title><description><![CDATA[<p>read() bricht mit dem Lesen ab, wenn es &quot;auf halbem Weg&quot; das Dateiende erreicht hat. Wieviele Bytes es tatsächlich gelesen hat, kannst du per gcount() ermitteln:</p>
<pre><code class="language-cpp">while(myFile)
{
  myFile.read(buffer,buf_size);
  send(socket,buffer,myFile.gcount(),0);
}
</code></pre>
<p>(oder du verwendest readsome() - das gibt die Anzahl der gelesenen Zeichen zurück)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228644</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 14 Feb 2007 11:56:39 GMT</pubDate></item><item><title><![CDATA[Reply to einlesen einer Datei; Dateiende erkenne mit EOF() on Wed, 14 Feb 2007 12:03:25 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>read() bricht mit dem Lesen ab, wenn es &quot;auf halbem Weg&quot; das Dateiende erreicht hat. Wieviele Bytes es tatsächlich gelesen hat, kannst du per gcount() ermitteln:</p>
<pre><code class="language-cpp">while(myFile)
{
  myFile.read(buffer,buf_size);
  send(socket,buffer,myFile.gcount(),0);
}
</code></pre>
<p>(oder du verwendest readsome() - das gibt die Anzahl der gelesenen Zeichen zurück)</p>
</blockquote>
<p>Das seht wesentlich eleganter aus als meins. thx</p>
<p>btw.<br />
war deine vermutung mit dem EOF() richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228650</guid><dc:creator><![CDATA[Jochim2006]]></dc:creator><pubDate>Wed, 14 Feb 2007 12:03:25 GMT</pubDate></item></channel></rss>