<?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[Brauche Hilfe beim fstream.]]></title><description><![CDATA[<p>Ich habe noch so einige Probleme mit dem fstream und hofe ihr könnt mir helfen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
using namespace std;

int main()
{
	char* buf = new char[45];
	ifstream inFile;
	ofstream outFile;
	int quest, fileSize = -1;
	int i = 0;

	inFile.open(&quot;Test.txt&quot;, ios::in);

	while (i &lt; 5)  
	{	
		inFile.read(buf, 45);
		buf[44] = '\0';
		cout &lt;&lt; buf &lt;&lt; endl;
		for (int j = 0; j &lt; 45; j++)
			buf[j] = ' ';
		fileSize++;
		i++;
	}
	cout &lt;&lt; &quot;Wählen sie einen Datensatz aus: &quot;;
	cin &gt;&gt; quest;
	inFile.close();
	outFile.open(&quot;Test.txt&quot;, ios::out | ios::app);
		outFile.seekp(quest * 45);
		buf = &quot;00002Hallo Hallo&quot;;
		buf[44] = '\0';
		outFile.write(buf, 44);
		outFile.write(&quot;\n&quot;, 1);
	outFile.close();
	cin.sync();
	cin.get();
	delete [] buf;
	return 0;
}
</code></pre>
<p>Hier die txt:</p>
<blockquote>
<p>00000irgendwo muss der Anfang sein....<br />
00001Hallo Welt<br />
00002naja<br />
00003und irgendwo gibts auch immer ein ende.</p>
</blockquote>
<p>So das Problem liegt darin, dass ich innerhalb der *.txt Datei einen Datensatz bearbeiten will. Wenn ich nun den Text in die Datei reinschreibe, dann gibts nur noch einen Buchstabensalat den keiner entziffern kann.<br />
Zuerst habe ich versucht hinter den Datensatz zu springen, ihn dann mit \b zu löschen und danach alles in die Datei zu schreiben, funktionierte allerdings nicht.<br />
Hoffe ihr versteht was für ein Problem ich habe und wisst wie es zu lösen ist.<br />
Danken tue ich euch bereits jetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/154475/brauche-hilfe-beim-fstream</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 23:44:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/154475.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Jul 2006 14:09:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Brauche Hilfe beim fstream. on Thu, 27 Jul 2006 14:09:43 GMT]]></title><description><![CDATA[<p>Ich habe noch so einige Probleme mit dem fstream und hofe ihr könnt mir helfen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
using namespace std;

int main()
{
	char* buf = new char[45];
	ifstream inFile;
	ofstream outFile;
	int quest, fileSize = -1;
	int i = 0;

	inFile.open(&quot;Test.txt&quot;, ios::in);

	while (i &lt; 5)  
	{	
		inFile.read(buf, 45);
		buf[44] = '\0';
		cout &lt;&lt; buf &lt;&lt; endl;
		for (int j = 0; j &lt; 45; j++)
			buf[j] = ' ';
		fileSize++;
		i++;
	}
	cout &lt;&lt; &quot;Wählen sie einen Datensatz aus: &quot;;
	cin &gt;&gt; quest;
	inFile.close();
	outFile.open(&quot;Test.txt&quot;, ios::out | ios::app);
		outFile.seekp(quest * 45);
		buf = &quot;00002Hallo Hallo&quot;;
		buf[44] = '\0';
		outFile.write(buf, 44);
		outFile.write(&quot;\n&quot;, 1);
	outFile.close();
	cin.sync();
	cin.get();
	delete [] buf;
	return 0;
}
</code></pre>
<p>Hier die txt:</p>
<blockquote>
<p>00000irgendwo muss der Anfang sein....<br />
00001Hallo Welt<br />
00002naja<br />
00003und irgendwo gibts auch immer ein ende.</p>
</blockquote>
<p>So das Problem liegt darin, dass ich innerhalb der *.txt Datei einen Datensatz bearbeiten will. Wenn ich nun den Text in die Datei reinschreibe, dann gibts nur noch einen Buchstabensalat den keiner entziffern kann.<br />
Zuerst habe ich versucht hinter den Datensatz zu springen, ihn dann mit \b zu löschen und danach alles in die Datei zu schreiben, funktionierte allerdings nicht.<br />
Hoffe ihr versteht was für ein Problem ich habe und wisst wie es zu lösen ist.<br />
Danken tue ich euch bereits jetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1105430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1105430</guid><dc:creator><![CDATA[Platy]]></dc:creator><pubDate>Thu, 27 Jul 2006 14:09:43 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe beim fstream. on Thu, 27 Jul 2006 14:28:09 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">buf = &quot;00002Hallo Hallo&quot;;
        buf[44] = '\0';
        outFile.write(buf, 44);
</code></pre>
<p>Du befüllst hier einen Zeiger mit einer Konstanten (das ist schonmal ein Memory-Leak, da Du den mit new angeforderten Bereich nie wieder freigeben kannst). Diese Konstante ist nur 16 Byte lang, und Du terminierst an der 45. Stelle (das ist schonmal undefiniert, Du hast Glück dass es nicht abstürzt). Danach schreibst Du 44 von diesen 16 Byte in die Datei (das ist nochmal eine Bereichsüberschreitung, also ist undefiniert was in der Datei landet, wenn das Programm nicht abstürzt).</p>
<p>Zunächst noch eine Frage: Ist denn überhaupt sichergestellt, dass in der Eingabedatei jede Zeile EXAKT 45 Zeichen lang ist?</p>
<p>Wenn Du das wirklich so machen willst, musst Du die Zeichenkette per strcpy in den Puffer befördern, nicht per Zuweisung.</p>
<p>Und ich bin mir jetzt nicht sicher ob ios::app nicht dafür sorgt dass <strong>immer</strong> and Ende der Datei geschrieben wird (das lässt sich aber sicher leicht durch Ausprobieren herausfinden).</p>
<p>EDIT:<br />
Nichtmal per strcpy, das terminiert Dir den String nämlich nach 16 Zeichen. Du willst danach ja noch Leerstellen bis zur 45. Stelle, deshalb:</p>
<pre><code class="language-cpp">memcpy(buf, &quot;00002Hallo Hallo&quot;, 16);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1105440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1105440</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 27 Jul 2006 14:28:09 GMT</pubDate></item></channel></rss>