<?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[End of File - behindet ofstream?]]></title><description><![CDATA[<p>Hoi!</p>
<p>Ich möchte:<br />
- Datei Zeichenweise einlesen<br />
- und in eine andere Datei schreiben</p>
<p>Das Problem:<br />
Datei wird zwar erstellt - zeichen wird in die &quot;schreiben&quot;-funktion richtig übergeben - aber werden danach nich in die datei geschrieben!</p>
<pre><code class="language-cpp">void eoffkt(string dateinamein, string dateinameout)
{
   cout&lt;&lt;&quot;dateinamein: &quot;&lt;&lt;dateinamein&lt;&lt;endl;  
   cout&lt;&lt;&quot;dateinameout: &quot;&lt;&lt; dateinameout&lt;&lt;endl;
   fflush(stdin);
   getchar();

   ifstream htmldatei;  
   htmldatei.open(dateinamein.c_str());

   char zeichen;

   while(!htmldatei.eof())
   {
     htmldatei.get(zeichen);
     char_schreiben(zeichen,dateinameout);   
   }   

   htmldatei.close();
}
void schreiben(char zeichen, string dateiname)
{  
   cout&lt;&lt;&quot;char_schreiben(&quot;&lt;&lt;zeichen&lt;&lt;&quot;)&quot;&lt;&lt;endl;  
   ofstream txtdatei;
   txtdatei.open(dateiname.c_str(), ios::out|ios::app);

            txtdatei&lt;&lt;zeichen;

   txtdatei.close();       
}
</code></pre>
<p>Ich bedanke mich in voraus für eure Bemühungen!</p>
<p>MfG ~ SITDnow</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/226639/end-of-file-behindet-ofstream</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 15:38:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/226639.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 Nov 2008 09:06:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to End of File - behindet ofstream? on Tue, 04 Nov 2008 09:06:41 GMT]]></title><description><![CDATA[<p>Hoi!</p>
<p>Ich möchte:<br />
- Datei Zeichenweise einlesen<br />
- und in eine andere Datei schreiben</p>
<p>Das Problem:<br />
Datei wird zwar erstellt - zeichen wird in die &quot;schreiben&quot;-funktion richtig übergeben - aber werden danach nich in die datei geschrieben!</p>
<pre><code class="language-cpp">void eoffkt(string dateinamein, string dateinameout)
{
   cout&lt;&lt;&quot;dateinamein: &quot;&lt;&lt;dateinamein&lt;&lt;endl;  
   cout&lt;&lt;&quot;dateinameout: &quot;&lt;&lt; dateinameout&lt;&lt;endl;
   fflush(stdin);
   getchar();

   ifstream htmldatei;  
   htmldatei.open(dateinamein.c_str());

   char zeichen;

   while(!htmldatei.eof())
   {
     htmldatei.get(zeichen);
     char_schreiben(zeichen,dateinameout);   
   }   

   htmldatei.close();
}
void schreiben(char zeichen, string dateiname)
{  
   cout&lt;&lt;&quot;char_schreiben(&quot;&lt;&lt;zeichen&lt;&lt;&quot;)&quot;&lt;&lt;endl;  
   ofstream txtdatei;
   txtdatei.open(dateiname.c_str(), ios::out|ios::app);

            txtdatei&lt;&lt;zeichen;

   txtdatei.close();       
}
</code></pre>
<p>Ich bedanke mich in voraus für eure Bemühungen!</p>
<p>MfG ~ SITDnow</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1609833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1609833</guid><dc:creator><![CDATA[SITDnow]]></dc:creator><pubDate>Tue, 04 Nov 2008 09:06:41 GMT</pubDate></item><item><title><![CDATA[Reply to End of File - behindet ofstream? on Tue, 04 Nov 2008 09:24:25 GMT]]></title><description><![CDATA[<p>fstream::eof() wird nicht zwangsläufig true, wenn das letzte Zeichen im Stream gelesen wurde. Bei manchen streams ist es für C++ nicht feststellbar, ob das letzte Zeichen bereits gelesen wurde, oder nicht. Z.B. bei Tastatureingaben. Daher kann es sein, dass eof erst true wird, wenn <em>hinter</em> dem letzten Zeichen gelesen wird.<br />
Besser ist es so:</p>
<pre><code class="language-cpp">void eoffkt(string dateinamein, string dateinameout)
{
   cout &lt;&lt; &quot;dateinamein: &quot; &lt;&lt; dateinamein &lt;&lt; endl;  
   cout &lt;&lt; &quot;dateinameout: &quot; &lt;&lt; dateinameout &lt;&lt; endl;
   //fflush(stdin); //fflush ist zum sofortigen leeren von Puffern von Ausgabestreams. 
                    //Für Eingabepuffer ist es UNDEFINIERT
   //getchar(); //Wozu?

   ifstream htmldatei(dateinamein.c_str()); //kann man hier schon angeben
   //htmldatei.open(dateinamein.c_str()); //unnoetig (s.o.)

   char zeichen;

   //besser so:
   while(htmldatei.get(zeichen))
   {
     //htmldatei.get(zeichen);
     char_schreiben(zeichen,dateinameout);  
   }  

   //htmldatei.close(); //Ueberfluessig. Wird automatisch beim Verlassen der Funktion geschlossen
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1609849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1609849</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 04 Nov 2008 09:24:25 GMT</pubDate></item><item><title><![CDATA[Reply to End of File - behindet ofstream? on Tue, 04 Nov 2008 09:59:52 GMT]]></title><description><![CDATA[<p>Danke für deine Antwort ^^</p>
<p>Aber leider besteht das Problem weiterhin &gt; es wird lediglich eine leere Datei erstellt...</p>
<p>(das getchar() war nur dazu da damit ich üperprüfen kann ob die dateinamen richitg waren (also gings erst weiter wenn man enter drückt - und ohne das fflush(stdin) macht getchar meist probleme - zb. wenn es das zweite mal aufgerufen wird)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1609876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1609876</guid><dc:creator><![CDATA[SITDnow]]></dc:creator><pubDate>Tue, 04 Nov 2008 09:59:52 GMT</pubDate></item><item><title><![CDATA[Reply to End of File - behindet ofstream? on Tue, 04 Nov 2008 10:14:48 GMT]]></title><description><![CDATA[<p>SITDnow schrieb:</p>
<blockquote>
<p>Danke für deine Antwort ^^</p>
<p>Aber leider besteht das Problem weiterhin &gt; es wird lediglich eine leere Datei erstellt...</p>
<p>(das getchar() war nur dazu da damit ich üperprüfen kann ob die dateinamen richitg waren (also gings erst weiter wenn man enter drückt - und ohne das fflush(stdin) macht getchar meist probleme - zb. wenn es das zweite mal aufgerufen wird)</p>
</blockquote>
<p>Wie gesagt, das Verhalten beim Flushen von Eingabestreams ist ebenso undefiniert, wie das Lesen und Schreiben in Speicherbereichen, die einem nicht gehören. Das heisst: <strong>nicht machen!</strong><br />
Das mit den istreams und den Resten im Puffer ist etwas kniffelig. Am Besten wartet man so:</p>
<pre><code class="language-cpp">std::cin.putback('\n'); //mindestens '\n' ist jetzt im Stream
std::cin.clear();   //Alle Flags loeschen (Fehler etc.)
std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), '\n'); //Den Stream leeren, entweder alles oder bis '\n'
std::cin.get(); //Warten
</code></pre>
<p>Wie sieht denn die Funktion <code>char_schreiben(zeichen,dateinameout)</code> aus? Vermutlich liegt der Fehler da.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1609887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1609887</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 04 Nov 2008 10:14:48 GMT</pubDate></item><item><title><![CDATA[Reply to End of File - behindet ofstream? on Tue, 04 Nov 2008 11:28:16 GMT]]></title><description><![CDATA[<p>Ich hab beim Beitrag schreiben die Funktionsnamen geändert, und dabei den Aufruf vergessen ^^&quot;</p>
<p>char_schreiben = schreiben</p>
<p>also so:</p>
<pre><code class="language-cpp">void char_schreiben(char zeichen, string dateiname)
{  
   cout&lt;&lt;&quot;char_schreiben(&quot;&lt;&lt;zeichen&lt;&lt;&quot;)&quot;&lt;&lt;endl;  
// nur um zu sehen ob ein zeichen übernommen wurde (Zeichen werden richtig übernommen)

   ofstream txtdatei;
   txtdatei.open(dateiname.c_str(), ios::out|ios::app);

            txtdatei&lt;&lt;zeichen;

   txtdatei.close();      
}
</code></pre>
<p>Danke für die Flush Erläuterung <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/1609928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1609928</guid><dc:creator><![CDATA[SITDnow]]></dc:creator><pubDate>Tue, 04 Nov 2008 11:28:16 GMT</pubDate></item><item><title><![CDATA[Reply to End of File - behindet ofstream? on Tue, 04 Nov 2008 11:46:31 GMT]]></title><description><![CDATA[<p>SITDnow schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Ich tippe mal darauf, dass der ifstream nicht richtig geöffnet wird (falscher Dateiname z.B.).<br />
Bau mal eine Prüfung ein:</p>
<pre><code class="language-cpp">//in void eoffkt(...)
//...
ifstream htmldatei(dateinamein.c_str());
if(!htmldatei)
{
   std::cerr &lt;&lt; &quot;Fehler beim oeffnen!\n&quot;;
   return;
}
//...
</code></pre>
<p>Das Ganze ist eh noch recht suboptimal.<br />
Die std::strings würde ich als Referenzen übergeben:</p>
<pre><code class="language-cpp">void eoffkt( const string&amp; dateinamein, const string&amp; dateinameout)
{/*...*/}
</code></pre>
<p>Sonst muss der String bei jedem Aufruf kopiert werden, was nicht notwendig ist.<br />
Außerdem solltest Du Dir vielleicht einen Mechanismus ausdenken, bei dem der ofstream nicht bei jedem Aufruf von char_schreiben geöffnet und geschlossen werden muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1609936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1609936</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 04 Nov 2008 11:46:31 GMT</pubDate></item><item><title><![CDATA[Reply to End of File - behindet ofstream? on Tue, 04 Nov 2008 12:37:54 GMT]]></title><description><![CDATA[<p>Der Dateiname wird schon in der Funktion die den Dateinamen einliest geprüft - und wie gesagt werden die Zeichen richtig eingelesen und auch in die &quot;char_schreiben&quot; Funktion übergeben.</p>
<p>Lediglich das schreiben in die Datei geht dann nicht mehr<br />
(Auch ein txtdatei&lt;&lt;&quot;bla bla&quot;; wird nicht in die Datei geschrieben...)</p>
<ul>
<li></li>
</ul>
<p>Sicher könnte ich auch die beiden Funktionen vereinen.<br />
Also beide f-Streams öffnen und dann die Schleife mit txtdatei&lt;&lt;zeichen; ausführen.</p>
<p>Nur das Problem besteht dann auch noch weiterhin...</p>
<p>Kann man file-streams flushen? Bzw. könnte es damit etwas zu tun haben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1609961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1609961</guid><dc:creator><![CDATA[SITDnow]]></dc:creator><pubDate>Tue, 04 Nov 2008 12:37:54 GMT</pubDate></item><item><title><![CDATA[Reply to End of File - behindet ofstream? on Tue, 04 Nov 2008 12:56:06 GMT]]></title><description><![CDATA[<p>SITDnow schrieb:</p>
<blockquote>
<p>Der Dateiname wird schon in der Funktion die den Dateinamen einliest geprüft - und wie gesagt werden die Zeichen richtig eingelesen und auch in die &quot;char_schreiben&quot; Funktion übergeben.</p>
</blockquote>
<p>Es geht nicht um den Dateinamen, sondern darum, ob die Datei korrekt geöffnet wurde. Bei mir geht der Code, sofern die Datei auch zu finden und zu öffnen ist.<br />
Und flushen musst Du da nichts. Das passiert spätestens beim close()/Destruktor des STreams.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1609968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1609968</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 04 Nov 2008 12:56:06 GMT</pubDate></item><item><title><![CDATA[Reply to End of File - behindet ofstream? on Tue, 04 Nov 2008 13:13:43 GMT]]></title><description><![CDATA[<p>Es wird tatsächlich ein Fehler Angezeigt... aber woran liegts? (Die Datei ist vorhanden sonst könnt er sie ja nicht einlesen und die Zeichen richtig weiter geben, oder???)</p>
<p>Ich hab mal alles stark vereinfacht.<br />
Aber ich denke das der Fehler der selbe ist wie bei diesen beiden Beispielen:</p>
<p>Dieses Beispiel Funktioniert:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

using namespace std;

int main()
{
   string dateinameIN,dateinameOUT;
   char zeichen;

   cout&lt;&lt;&quot;Eingabe Input-Datei&quot;&lt;&lt;endl;
   cin&gt;&gt;dateinameIN;
   cout&lt;&lt;&quot;Eingabe Output-Datei&quot;&lt;&lt;endl;
   cin&gt;&gt;dateinameOUT;

   ifstream indatei(dateinameIN.c_str()); 
   ofstream outdatei(dateinameOUT.c_str(), ios::out|ios::app);

   while(indatei.get(zeichen))
        outdatei&lt;&lt;zeichen;
}
</code></pre>
<p>Und dieses Erweiterung nicht:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

using namespace std;

int main()
{
   string dateinameIN,dateinameOUT;
   char zeichen;

   cout&lt;&lt;&quot;Eingabe Input-Datei&quot;&lt;&lt;endl;
   cin&gt;&gt;dateinameIN;
   cout&lt;&lt;&quot;Eingabe Output-Datei&quot;&lt;&lt;endl;
   cin&gt;&gt;dateinameOUT;

   ifstream indatei(dateinameIN.c_str()); 
   ofstream outdatei(dateinameOUT.c_str(), ios::out|ios::app);

   bool jump=0;
   while(indatei.get(zeichen))
   {
     if(zeichen='&lt;')
        {
                    jump=1;
                    cout&lt;&lt;&quot;&lt;&quot;;
        }

     if(jump==0)   
        outdatei&lt;&lt;zeichen;

     if(zeichen='&gt;')
        {
        jump=0;
        cout&lt;&lt;&quot;&gt;&quot;;
        }
   }  
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1609982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1609982</guid><dc:creator><![CDATA[SITDnow]]></dc:creator><pubDate>Tue, 04 Nov 2008 13:13:43 GMT</pubDate></item><item><title><![CDATA[Reply to End of File - behindet ofstream? on Tue, 04 Nov 2008 13:14:34 GMT]]></title><description><![CDATA[<p>SITDnow schrieb:</p>
<blockquote>
<p>Und dieses Erweiterung nicht:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

using namespace std;

int main()
{
   string dateinameIN,dateinameOUT;
   char zeichen;
   
   cout&lt;&lt;&quot;Eingabe Input-Datei&quot;&lt;&lt;endl;
   cin&gt;&gt;dateinameIN;
   cout&lt;&lt;&quot;Eingabe Output-Datei&quot;&lt;&lt;endl;
   cin&gt;&gt;dateinameOUT;
   
   ifstream indatei(dateinameIN.c_str());
   //hier pruefen, ob das Oeffnen erfolgreich war!!
   ofstream outdatei(dateinameOUT.c_str(), ios::out|ios::app);
   //hier pruefen, ob das Oeffnen erfolgreich war!!
   
   bool jump=0; //false anstatt 0
   while(indatei.get(zeichen))
   {
     if(zeichen='&lt;') // == anstatt = ( ist so immer true!)
        {
                    jump=1; //true statt 1 (ist wegen oben immer true)
                    cout&lt;&lt;&quot;&lt;&quot;;
        }

     if(jump==0) //false anstatt 0
        outdatei&lt;&lt;zeichen;

     if(zeichen='&gt;') // == anstatt =
        {
        jump=0; //false anstatt 0
        cout&lt;&lt;&quot;&gt;&quot;;
        }
   }  
}
</code></pre>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1609984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1609984</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 04 Nov 2008 13:14:34 GMT</pubDate></item><item><title><![CDATA[Reply to End of File - behindet ofstream? on Tue, 04 Nov 2008 13:32:47 GMT]]></title><description><![CDATA[<p>Okay das war ein schönes beispiel dafür das man nichts zwischen Tür und Angel schreiben sollte... dann klappts auch im Projekt:<br />
Aber wo war nun der Fehler?? An den Dateinamen hab ich nichts gedreht.</p>
<pre><code class="language-cpp">void eoffkt(string dateinameIN,string dateinameOUT)
{
   char zeichen;  
   cout&lt;&lt;&quot;dateinamein: &quot;&lt;&lt;dateinameIN&lt;&lt;endl;  
   cout&lt;&lt;&quot;dateinameout: &quot;&lt;&lt; dateinameOUT&lt;&lt;endl;

   ifstream indatei(dateinameIN.c_str()); 
   ofstream outdatei(dateinameOUT.c_str(), ios::out|ios::app);

   bool jump=false;
   while(indatei.get(zeichen))
   {
     if(zeichen=='&lt;')
        {
                    jump=true;
                    cout&lt;&lt;&quot;&lt;&quot;;
        }
     if(jump==false)   
        outdatei&lt;&lt;zeichen;

     if(zeichen=='&gt;')
        {
                   jump=false;
                   cout&lt;&lt;&quot;&gt;&quot;;
        }
   }  
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1609990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1609990</guid><dc:creator><![CDATA[SITDnow]]></dc:creator><pubDate>Tue, 04 Nov 2008 13:32:47 GMT</pubDate></item></channel></rss>