<?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[fstream - verweigert das schreiben ins Dokument]]></title><description><![CDATA[<p>Einen schönen guten Tag wünsche ich :),<br />
ich habe jetzt vor kurzem mit dem Lernen von C++ begonnen. Bis dahin habe ich größten Teils in Java programmiert. Während meiner Nachforschungen bin ich auf dieses Forum gestoßen, das mir bereits (mithilfe der SuFu ;)) häufig weiter geholfen hat ;). Dafür schonmal ein Danke an alle Beiträge, die ich bislang gelesen habe ;). Jetzt habe ich aber momentan ein Problem, bei dem ich einfach nicht weiter komme. Ich vermute es liegt an einem Verständnisproblem ;). Ich hoffe jemanden fällt ein Fehler auf und kann mir den richtigen Denkanstoß geben ;). Aber nun zu meinem Problem:</p>
<p>Ich möchte gerne in eine bereits bestehende Datei Ergänzungen hinzufügen, die<br />
aber innerhalb des Dokuments und nicht am Ende angehängt werden sollen.<br />
Also habe ich folgender maßen begonnen:</p>
<pre><code>void addElement(string path, string element){
string keyWord;
bool posFound == false;
fstream environment;
environment.open(path,ios::out|ios::in)
</code></pre>
<p>Also bis hierhin öffne ich einfach mein Dokument und erlaube sowohl das Lesen, wie auch das Schreiben. In meinem Buch stand, dass wenn ios::out benutzt wird, ios::in folgen muss, damit der Inhalt nicht gelöscht wird.<br />
Also weiter</p>
<pre><code>while(!environment.eof() &amp;&amp; !posFound){  
    getLine(environment,keyWord)
    if (keyWord == &quot;addHere&quot;)
      posFound = true;
  }
</code></pre>
<p>Mit dem Code-Abschnitt spring ich in die Zeile, in der das neue Element stehen soll. Bis hierhin habe ich noch die Hoffnung, dass alles funktioniert. Und nun zu der kritischen Stelle.</p>
<pre><code>environment &lt;&lt; &quot;\n\t\t&quot; &lt;&lt; element &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>Hier sollte er eigentlich den Inhalt von element, in das Dokument an die Stelle schreiben an die ich im vorherigen Abschnitt gesprungen bin. Nur leider bleibt man Dokument, wenn ich es mir ansehe, unverändert. Was läuft da falsch bzw. was ich habe da noch nicht verstanden?<br />
Hier noch die verwendeten #includes:</p>
<pre><code>#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;
</code></pre>
<p>Fall es weiterhelfen sollte: Ich nutze zum programmieren viusal studios 2010.<br />
Ich hoffe jemand kann mir hier helfen <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="😞"
    /> . Ich bedanke mich auf jeden Fall mal schon für die Mühe :).<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/318605/fstream-verweigert-das-schreiben-ins-dokument</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 07:42:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318605.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Jul 2013 11:24:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to fstream - verweigert das schreiben ins Dokument on Fri, 19 Jul 2013 11:24:03 GMT]]></title><description><![CDATA[<p>Einen schönen guten Tag wünsche ich :),<br />
ich habe jetzt vor kurzem mit dem Lernen von C++ begonnen. Bis dahin habe ich größten Teils in Java programmiert. Während meiner Nachforschungen bin ich auf dieses Forum gestoßen, das mir bereits (mithilfe der SuFu ;)) häufig weiter geholfen hat ;). Dafür schonmal ein Danke an alle Beiträge, die ich bislang gelesen habe ;). Jetzt habe ich aber momentan ein Problem, bei dem ich einfach nicht weiter komme. Ich vermute es liegt an einem Verständnisproblem ;). Ich hoffe jemanden fällt ein Fehler auf und kann mir den richtigen Denkanstoß geben ;). Aber nun zu meinem Problem:</p>
<p>Ich möchte gerne in eine bereits bestehende Datei Ergänzungen hinzufügen, die<br />
aber innerhalb des Dokuments und nicht am Ende angehängt werden sollen.<br />
Also habe ich folgender maßen begonnen:</p>
<pre><code>void addElement(string path, string element){
string keyWord;
bool posFound == false;
fstream environment;
environment.open(path,ios::out|ios::in)
</code></pre>
<p>Also bis hierhin öffne ich einfach mein Dokument und erlaube sowohl das Lesen, wie auch das Schreiben. In meinem Buch stand, dass wenn ios::out benutzt wird, ios::in folgen muss, damit der Inhalt nicht gelöscht wird.<br />
Also weiter</p>
<pre><code>while(!environment.eof() &amp;&amp; !posFound){  
    getLine(environment,keyWord)
    if (keyWord == &quot;addHere&quot;)
      posFound = true;
  }
</code></pre>
<p>Mit dem Code-Abschnitt spring ich in die Zeile, in der das neue Element stehen soll. Bis hierhin habe ich noch die Hoffnung, dass alles funktioniert. Und nun zu der kritischen Stelle.</p>
<pre><code>environment &lt;&lt; &quot;\n\t\t&quot; &lt;&lt; element &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>Hier sollte er eigentlich den Inhalt von element, in das Dokument an die Stelle schreiben an die ich im vorherigen Abschnitt gesprungen bin. Nur leider bleibt man Dokument, wenn ich es mir ansehe, unverändert. Was läuft da falsch bzw. was ich habe da noch nicht verstanden?<br />
Hier noch die verwendeten #includes:</p>
<pre><code>#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;
</code></pre>
<p>Fall es weiterhelfen sollte: Ich nutze zum programmieren viusal studios 2010.<br />
Ich hoffe jemand kann mir hier helfen <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="😞"
    /> . Ich bedanke mich auf jeden Fall mal schon für die Mühe :).<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2339842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339842</guid><dc:creator><![CDATA[Aeron]]></dc:creator><pubDate>Fri, 19 Jul 2013 11:24:03 GMT</pubDate></item><item><title><![CDATA[Reply to fstream - verweigert das schreiben ins Dokument on Fri, 19 Jul 2013 11:28:12 GMT]]></title><description><![CDATA[<p>Aeron schrieb:</p>
<blockquote>
<p>Ich möchte gerne in eine bereits bestehende Datei Ergänzungen hinzufügen, die aber innerhalb des Dokuments und nicht am Ende angehängt werden sollen.</p>
</blockquote>
<p>Kurz und knapp: Das ist nicht möglich.</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Du kannst an Dateien immer nur hinten was anhängen. Vorne anhängen geht nicht. In der Mitte einfügen geht auch nicht.<br />
D.h. du musst den gesamten Inhalt der Datei umkopieren.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2339844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339844</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Fri, 19 Jul 2013 11:28:12 GMT</pubDate></item><item><title><![CDATA[Reply to fstream - verweigert das schreiben ins Dokument on Fri, 19 Jul 2013 11:35:31 GMT]]></title><description><![CDATA[<p>Vielen Dank für die super schnelle Antwort :). Da hätte ich dann ja noch lange herum probieren können.<br />
Dann werde ich gleich mal probieren, das Dokument einfach zu kopieren mit dem neuen Inhalt ;). Mein Dokument wird zwar wahrscheinlich nie wirklich lang, aber gibt es effizientere Möglichkeit als das Kopieren?<br />
Auf jeden Fall vielen Dank <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/2339847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339847</guid><dc:creator><![CDATA[Aeron]]></dc:creator><pubDate>Fri, 19 Jul 2013 11:35:31 GMT</pubDate></item><item><title><![CDATA[Reply to fstream - verweigert das schreiben ins Dokument on Fri, 19 Jul 2013 11:45:49 GMT]]></title><description><![CDATA[<p>Du kannst noch versuchen, unmittelbar vor dem Schreiben ein</p>
<pre><code>environment.seekp( environment.tellg() ); // setzt den Schreibzeiger auf die aktuelle Leseposition
</code></pre>
<p>zu setzen</p>
<p>Der Effekt ist dann, dass das File überschrieben wird, d.h. schreibst Du weniger als schon hinter der Stelle im File steht, so bleibt dieser Inhalt erhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2339851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339851</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Fri, 19 Jul 2013 11:45:49 GMT</pubDate></item><item><title><![CDATA[Reply to fstream - verweigert das schreiben ins Dokument on Fri, 19 Jul 2013 11:52:38 GMT]]></title><description><![CDATA[<p>Versuch das mal:</p>
<pre><code>#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;string&gt;
using namespace std;

void add_element( const string&amp; path, const string&amp; element ) // Schau dir mal call-by-reference an
{
	string content;
	{
		ifstream environment( path.c_str() ); // Versuch, entweder ifstream oder ofstream zu verwenden, und nicht fstream
		content = string( (istreambuf_iterator&lt;char&gt;(environment)), (istreambuf_iterator&lt;char&gt;()) );
	}

	string keyword    = &quot;addHere&quot;;
	unsigned position = content.find( keyword );
	if( position != std::string::npos )
	{
		string insert = &quot;\n\t\t&quot; + element + '\n';
		content.replace( position, keyword.length(), insert );
	}

	ofstream environment( path.c_str() );
	environment &lt;&lt; content;
}

int main()
{
	add_element( &quot;test.txt&quot;, &quot;DAS IST NEU&quot; ); // Hallo welt, addHere wie geht es dir heute?
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2339854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339854</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Fri, 19 Jul 2013 11:52:38 GMT</pubDate></item><item><title><![CDATA[Reply to fstream - verweigert das schreiben ins Dokument on Fri, 19 Jul 2013 12:00:51 GMT]]></title><description><![CDATA[<p>Vielen vielen Dank für die ganzen Tipps und die super schnelle Hilfe :). Ich werde versuchen mir die Sachen jetzt nochmal in ruhe anzugucken und nachzuvollziehen und werde es dann nocheinmal selbst versuchen zu programmieren :). Ihr habt mir super weitergeholfen :). Danke :)!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2339857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339857</guid><dc:creator><![CDATA[Aeron]]></dc:creator><pubDate>Fri, 19 Jul 2013 12:00:51 GMT</pubDate></item><item><title><![CDATA[Reply to fstream - verweigert das schreiben ins Dokument on Fri, 19 Jul 2013 12:11:55 GMT]]></title><description><![CDATA[<p>Aeron schrieb:</p>
<blockquote>
<p>Mein Dokument wird zwar wahrscheinlich nie wirklich lang, aber gibt es effizientere Möglichkeit als das Kopieren?</p>
</blockquote>
<p>Wenn wirklich eingefügt werden muss: Nein. Aber es wäre eine Idee, sich ein Format zu überlegen, bei dem man Änderungen auch anhängen kann oder die Änderungen separat speichert oder die Reihenfolge in der Datei von vornherein keine Rolle spielt.</p>
<p>So machen (oder machten? Ich bin da nicht so auf dem Stand) das zum Beispiel viele Büroprogramme, um Dateien schneller zu speichern<sup>*</sup>.</p>
<p><sup>*</sup>: Übrigens ein riesiges Sicherheitsloch, wenn man etwas löscht und das Dokument dann verschickt. Dann kann jeder die Änderungen rückgängig machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2339861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339861</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 19 Jul 2013 12:11:55 GMT</pubDate></item><item><title><![CDATA[Reply to fstream - verweigert das schreiben ins Dokument on Fri, 19 Jul 2013 12:31:31 GMT]]></title><description><![CDATA[<p>Als Übung hatte ich mir halt überlegt, sowas ähnliches wie eine xml Struktur zu schreiben. Und die sind ja aufgebaut wie so eine Baumstruktur, in die ja sicherlich nicht immer nur am Ende eingefügt wird. Deswegen dachte ich mir, dass wäre möglich einfach irgendwie dazwischen was zu ergänzen. Aber wie gesagt, ich probier mal die Sachen von out und Werne_logoff aus. Würde ich gerne sofort angehen, muss aber leider gleich zur Arbeit <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2339869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339869</guid><dc:creator><![CDATA[Aeron]]></dc:creator><pubDate>Fri, 19 Jul 2013 12:31:31 GMT</pubDate></item><item><title><![CDATA[Reply to fstream - verweigert das schreiben ins Dokument on Sat, 20 Jul 2013 20:27:22 GMT]]></title><description><![CDATA[<p>hey, seh den post zwar leider etwas spät, aber wäre es nicht auch eine möglichkeit die datei erstmal komplett einzulesen, dann zeile für zurückschreiben und auf die gesuchte Position zu prüfen??Hab mir irgendwas wie dies hier gedacht</p>
<p>[code=&quot;cpp&quot;]<br />
std::ifstream File(&quot;test.cpp&quot;); //Datei öffnen und auf fehler prüfen<br />
if(File == NULL)<br />
return 1;<br />
std::string element(&quot;found&quot;); //Die neu zu schreibende zeile<br />
std::string Lines; //Die einzelnen Zeilen der datei<br />
std::vector<a href="std::string" rel="nofollow">std::string</a> FileLines; //Vector mit den zeilen<br />
while(!File.eof()){<br />
getline(File,Lines); //Einlesen der datei<br />
FileLines.push_back(Lines);<br />
}<br />
std::ofstream NewFile(&quot;test.cpp&quot;, std::ios_base::trunc); //Die neue datei<br />
for(auto i : FileLines){<br />
if(i.find(&quot;addhere&quot;) == std::string::npos) //gefunden?<br />
NewFile &lt;&lt; i &lt;&lt; std::endl; //schreibe lediglich nächste zeile<br />
else{<br />
NewFile &lt;&lt; element &lt;&lt; std::endl; //schreibe unsere zeile vor die alte zeile<br />
NewFile &lt;&lt; i &lt;&lt; std::endl;<br />
}<br />
}<br />
}<br />
[code=&quot;cpp&quot;]</p>
<p>Naja war nur ein gedanke vllt hilft es ja irgendwie</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2340103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2340103</guid><dc:creator><![CDATA[negaduck]]></dc:creator><pubDate>Sat, 20 Jul 2013 20:27:22 GMT</pubDate></item><item><title><![CDATA[Reply to fstream - verweigert das schreiben ins Dokument on Sun, 21 Jul 2013 06:58:29 GMT]]></title><description><![CDATA[<p>negaduck schrieb:</p>
<blockquote>
<p>aber wäre es nicht auch eine möglichkeit die datei erstmal komplett einzulesen, dann zeile für zurückschreiben und auf die gesuchte Position zu prüfen?</p>
</blockquote>
<p>Geht auch. Aber nicht mit deinem Quellcode. <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2340145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2340145</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sun, 21 Jul 2013 06:58:29 GMT</pubDate></item><item><title><![CDATA[Reply to fstream - verweigert das schreiben ins Dokument on Tue, 23 Jul 2013 11:58:22 GMT]]></title><description><![CDATA[<p>Ohh erstmal sorry dafür das die CodeTags nicht funzten.<br />
Hmm bei mir hat der Code ohne Probleme funktioniert fehlen natürlich nur die main und die Header.Wärst du vllt so freundlich dein Wissen mit uns(bzw. mir) nicht wissenden zu teilen??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2340598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2340598</guid><dc:creator><![CDATA[negaduck]]></dc:creator><pubDate>Tue, 23 Jul 2013 11:58:22 GMT</pubDate></item></channel></rss>