<?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[Mitten in Datei schreiben???]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich hab hier so eine html-datei-erstell Funktion geschrieben.<br />
Jetzt schreib ich also zuerst mal die Grundstruktur in diese Datei:</p>
<pre><code>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html&gt;
	&lt;head&gt;
&lt;title&gt; &lt;/title&gt;
&lt;meta&gt; &lt;/meta&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td class=&quot;msg_no_head&quot;&gt;NO:&lt;/td&gt;
&lt;td class=&quot;msg_type_head&quot;&gt;Msg type:&lt;/td&gt;
&lt;td class=&quot;msg_desc_head&quot;&gt;Description:&lt;/td&gt;

&lt;/tr&gt;&lt;!--NEXT_ROW--&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>Jetzt geht das so, dass ich die Zeichenanzahl bis</p>
<pre><code>&lt;!--NEXT_ROW--&gt;
</code></pre>
<p>einlese und dann den neuen String DAHIN, also an diese ausgewählte Position setzten will.<br />
Den String den ich da hin setzten will sieht so aus:</p>
<pre><code>&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;test&lt;/td&gt;&lt;td&gt;desc&lt;/td&gt;&lt;/tr&gt;
</code></pre>
<p>Wenn ich die Datei jetzt öffne, dann geht das ja nur bedingt, also lese oder schreib Zugriff mit entsprechenden ios_base::... parametern.<br />
Das einzige was bis jetzt ging ist das dranhängen. Das sieht dann so aus:</p>
<pre><code>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html&gt;
	&lt;head&gt;
&lt;title&gt; &lt;/title&gt;
&lt;meta&gt; &lt;/meta&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td class=&quot;msg_no_head&quot;&gt;NO:&lt;/td&gt;
&lt;td class=&quot;msg_type_head&quot;&gt;Msg type:&lt;/td&gt;
&lt;td class=&quot;msg_desc_head&quot;&gt;Description:&lt;/td&gt;

&lt;/tr&gt;&lt;!--NEXT_ROW--&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;test&lt;/td&gt;&lt;td&gt;desc&lt;/td&gt;&lt;/tr&gt;
</code></pre>
<p>Wie kann ich jetzt z.b. den Teil hier löschen:</p>
<pre><code>&lt;!--NEXT_ROW--&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>Weil den kann man ja einlesen. Wenn ich den löschen könnte, dann könnte ich den neuen String an die Datei anhängen und dann das gelöschte wiederum hinten dran hängen. Dann hätte ich ja den neuen String mitten drin.</p>
<p>Oder geht das anders?<br />
Wie kann ich also da zwischen rein schreiben?</p>
<p>#EDIT#<br />
Ein Zeiger auf den Anfang der Datei wäre super.<br />
Ich hab alles versucht. Mit FILE und mit wofstream.<br />
Ich bekomme keinen Zeiger auf die (verdammte) Datei.<br />
Das muss doch irgendwie gehen!!!<br />
#/EDIT#</p>
<p>Gruß<br />
Alex</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/150190/mitten-in-datei-schreiben</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 13:44:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/150190.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Jun 2006 22:39:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mitten in Datei schreiben??? on Wed, 14 Jun 2006 00:00:16 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich hab hier so eine html-datei-erstell Funktion geschrieben.<br />
Jetzt schreib ich also zuerst mal die Grundstruktur in diese Datei:</p>
<pre><code>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html&gt;
	&lt;head&gt;
&lt;title&gt; &lt;/title&gt;
&lt;meta&gt; &lt;/meta&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td class=&quot;msg_no_head&quot;&gt;NO:&lt;/td&gt;
&lt;td class=&quot;msg_type_head&quot;&gt;Msg type:&lt;/td&gt;
&lt;td class=&quot;msg_desc_head&quot;&gt;Description:&lt;/td&gt;

&lt;/tr&gt;&lt;!--NEXT_ROW--&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>Jetzt geht das so, dass ich die Zeichenanzahl bis</p>
<pre><code>&lt;!--NEXT_ROW--&gt;
</code></pre>
<p>einlese und dann den neuen String DAHIN, also an diese ausgewählte Position setzten will.<br />
Den String den ich da hin setzten will sieht so aus:</p>
<pre><code>&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;test&lt;/td&gt;&lt;td&gt;desc&lt;/td&gt;&lt;/tr&gt;
</code></pre>
<p>Wenn ich die Datei jetzt öffne, dann geht das ja nur bedingt, also lese oder schreib Zugriff mit entsprechenden ios_base::... parametern.<br />
Das einzige was bis jetzt ging ist das dranhängen. Das sieht dann so aus:</p>
<pre><code>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html&gt;
	&lt;head&gt;
&lt;title&gt; &lt;/title&gt;
&lt;meta&gt; &lt;/meta&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td class=&quot;msg_no_head&quot;&gt;NO:&lt;/td&gt;
&lt;td class=&quot;msg_type_head&quot;&gt;Msg type:&lt;/td&gt;
&lt;td class=&quot;msg_desc_head&quot;&gt;Description:&lt;/td&gt;

&lt;/tr&gt;&lt;!--NEXT_ROW--&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;test&lt;/td&gt;&lt;td&gt;desc&lt;/td&gt;&lt;/tr&gt;
</code></pre>
<p>Wie kann ich jetzt z.b. den Teil hier löschen:</p>
<pre><code>&lt;!--NEXT_ROW--&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>Weil den kann man ja einlesen. Wenn ich den löschen könnte, dann könnte ich den neuen String an die Datei anhängen und dann das gelöschte wiederum hinten dran hängen. Dann hätte ich ja den neuen String mitten drin.</p>
<p>Oder geht das anders?<br />
Wie kann ich also da zwischen rein schreiben?</p>
<p>#EDIT#<br />
Ein Zeiger auf den Anfang der Datei wäre super.<br />
Ich hab alles versucht. Mit FILE und mit wofstream.<br />
Ich bekomme keinen Zeiger auf die (verdammte) Datei.<br />
Das muss doch irgendwie gehen!!!<br />
#/EDIT#</p>
<p>Gruß<br />
Alex</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1077253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1077253</guid><dc:creator><![CDATA[DeineMutter]]></dc:creator><pubDate>Wed, 14 Jun 2006 00:00:16 GMT</pubDate></item><item><title><![CDATA[Reply to Mitten in Datei schreiben??? on Wed, 14 Jun 2006 08:03:37 GMT]]></title><description><![CDATA[<p>Du kannst nichts aus einer Datei rauslöschen. Lies alles ein (vielleicht in ein vector&lt;string&gt; oder so), füge dann deine Zeile dort ein und schreibe die gesamte Datei wieder raus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1077331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1077331</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 14 Jun 2006 08:03:37 GMT</pubDate></item><item><title><![CDATA[Reply to Mitten in Datei schreiben??? on Wed, 14 Jun 2006 08:52:44 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Du kannst nichts aus einer Datei rauslöschen. Lies alles ein (vielleicht in ein vector&lt;string&gt; oder so), füge dann deine Zeile dort ein und schreibe die gesamte Datei wieder raus.</p>
</blockquote>
<p>Du kannst nichts einfügen, aber überschreiben. Das heißt, Du kannst den Teil hinter dem Bereich, an dem Du schreiben möchtest einlesen, dann überschreiben und den eingelesen Part wieder hinten anfügen. Damit ersparst Du Dir das einlesen und wieder zurückschreiben des Bereichs, der vor dem eingefügten Bereich liegt.</p>
<p>Solltest Du etwas aus der Datei löschen, müsstest Du den dahinterliegenden Part nach vorne kopieren und die Daten anschließend verkürzen.<br />
Das spart je nach Dateigröße viel Arbeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1077386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1077386</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Wed, 14 Jun 2006 08:52:44 GMT</pubDate></item><item><title><![CDATA[Reply to Mitten in Datei schreiben??? on Wed, 14 Jun 2006 09:52:08 GMT]]></title><description><![CDATA[<p>Hallo und Danke schon mal.</p>
<p>Also, dass man aus einer Datei nicht löschen kann, hab ich leider auch schon feststellen müssen. Meine Datei sieht schon so gut aus, und alles funktioniert, bis eben auf das, das ich gerne löschen würde.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1387">@Braunstein</a>:<br />
Das mit einem Vektor machen, ist vielleicht nicht die beste Lösung, denn da könnte viel Output anfallen, den ich lieber gleich auf der Festplatte habe, als auf dem heap oder dem stack.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11309">@Xin</a>:<br />
Das ist gut, dass Du das sagst, denn ich habe noch mal(zum tausendsten Mal) über die MSDN Doc geschaut und habe feststellen müssen, dass CreateFile() die richtige Lösung für mich ist, denn man kann als Parameter ein OVERLAPPED stuct übergeben, die genau die Parameter beschreibt, die für mich wichtig sind, nämlich offset Parameter. So, ich hoffe das meintest Du so!<br />
Ich habe es mit FILE und mit wofstrea/wifstream versucht, aber da geht nichts.</p>
<p>Nebenbei gefragt, ist es möglich einen Zeiger auf eine Datei zu bekommen, die man dann z.B. in einen Zeiger auf TCHAR, also in TCHAR*, castet und so die Datei durchlaufen kann? Oder geht das nicht, weil die Datei ja auf der Festplatte liegt?</p>
<p>Gruß<br />
Alex</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1077433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1077433</guid><dc:creator><![CDATA[DeineMutter]]></dc:creator><pubDate>Wed, 14 Jun 2006 09:52:08 GMT</pubDate></item><item><title><![CDATA[Reply to Mitten in Datei schreiben??? on Wed, 14 Jun 2006 11:00:48 GMT]]></title><description><![CDATA[<p>Hi Mom!</p>
<p>DeineMutter schrieb:</p>
<blockquote>
<p>Das ist gut, dass Du das sagst, denn ich habe noch mal(zum tausendsten Mal) über die MSDN Doc geschaut und habe feststellen müssen, dass CreateFile() die richtige Lösung für mich ist, denn man kann als Parameter ein OVERLAPPED stuct übergeben, die genau die Parameter beschreibt, die für mich wichtig sind, nämlich offset Parameter. So, ich hoffe das meintest Du so!</p>
</blockquote>
<p>Öhh.. nö, ist halt die Frage, welche API man nutzen will. Ich nutze in der Regel die Standard C oder C++ API, womit ich OS unabhängig bleibe und da ich eh vorrangig Linux programmiere, dachte ich weniger an die MSDN <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="😉"
    /><br />
Aber gut, damit geht's sicherlich genauso gut.</p>
<p>DeineMutter schrieb:</p>
<blockquote>
<p>Ich habe es mit FILE und mit wofstrea/wifstream versucht, aber da geht nichts.</p>
</blockquote>
<p>Bei FILE * wäre fseek Dein Stichwort, gefolgt von (iirc) ftruncate.</p>
<p>DeineMutter schrieb:</p>
<blockquote>
<p>Nebenbei gefragt, ist es möglich einen Zeiger auf eine Datei zu bekommen, die man dann z.B. in einen Zeiger auf TCHAR, also in TCHAR*, castet und so die Datei durchlaufen kann? Oder geht das nicht, weil die Datei ja auf der Festplatte liegt?</p>
</blockquote>
<p>Ein Zeiger zeigt auf einen Speicherbereich im RAM. Du musst die Daten erst in den RAM kopieren, damit Du draufzeigen kannst.<br />
Grundsätzlich ist das Muster Datei öffnen, gewünschte Daten laden, Daten im Speicher modifizieren, Änderungen zurückschreiben (oder sehr häufig auch komplette Datei überschreiben), Datei schließen.<br />
Du könntest Dir natürlich mit entsprechender Kenntnis in C++ eine Klasse schreiben, die als Dateizeiger fungiert und bei Zugriff dafür sorgt, dass die entsprechenden Daten vor dem Zugriff im RAM verfügbar sind und die Änderungen vor dem Schließen wieder in die Datei zurückschreibt.<br />
Damit könntest Du das Öffnen, Schließen, Lesen und Schreiben natürlich automatisieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1077485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1077485</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Wed, 14 Jun 2006 11:00:48 GMT</pubDate></item><item><title><![CDATA[Reply to Mitten in Datei schreiben??? on Wed, 14 Jun 2006 12:11:30 GMT]]></title><description><![CDATA[<p>Hallo Xin.</p>
<p>Xin schrieb:</p>
<blockquote>
<p>Bei FILE * wäre fseek Dein Stichwort, gefolgt von (iirc) ftruncate.</p>
</blockquote>
<p>Das mit den FILE ist so eine Sache. Wenn ich eine Datei mit _wfopen() öffne, dann muss ich da diese mode parameter mit angeben. Diese Parameter besagen wie ich auf die Datei zugreife.<br />
Das einzige nützliche flag in diesen Fall für mich wäre</p>
<pre><code>TEXT(&quot;ab+&quot;)
</code></pre>
<p>, was bedeutet, dass die Funktion alles hinten dranhängt(a = append). Etwas anderes geht hier überhaupt nicht. Ich kann durch diese mode Parameter nur noch öffnen, schreiben, beides usw. Aber alles andere würde die Datei komplett löschen und den Inhalt der Datei will ich vorher auch nicht in den Speicher schreiben. Viel zu umständlich.</p>
<p>Jetzt ist das ja so, wenn ich also mit dem TEXT(&quot;ab+&quot;) öffne, dann setzt die Funktion fwrite() den file Zeiger immer vor das EOF Zeichen bzw. speichert es, löscht es und setzt es dann am Ende wieder dran.</p>
<p>Wenn ich jetzt mit seekf() die Zeigerposition setzt, also bevor ich fwrite() aufrufe, bringt mir das nichts, denn fwrite setzt den Zeiger ja wieder ans Ende.</p>
<p>Xin schrieb:</p>
<blockquote>
<p>ftruncate</p>
</blockquote>
<p>Ja, da gibt es noch sowas ähnliches, das auch in das mode-flag mit einfließt, nämlich</p>
<pre><code>TEXT(&quot;t&quot;)
</code></pre>
<p>. Aber das bewerkstelligt das setzten des Dateizeigers auf die Position 0, und überschreibt damit den vorherigen Text. Wenn ich das jetzt nicht falsch verstanden habe.</p>
<p>Wie auch immer. Mit CreateFile() und FileWrite() und der struct OVERLAPPED funktioniert alles bestens und ich kann vorhandenen Inhalt ersetzten. Genau so wie ich mir das vorgestellt habe!!</p>
<p>Gruß und Dank<br />
Alex</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1077544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1077544</guid><dc:creator><![CDATA[DeineMutter]]></dc:creator><pubDate>Wed, 14 Jun 2006 12:11:30 GMT</pubDate></item><item><title><![CDATA[Reply to Mitten in Datei schreiben??? on Wed, 14 Jun 2006 12:30:16 GMT]]></title><description><![CDATA[<p>DeineMutter schrieb:</p>
<blockquote>
<p>Hallo Xin.</p>
<p>Xin schrieb:</p>
<blockquote>
<p>Bei FILE * wäre fseek Dein Stichwort, gefolgt von (iirc) ftruncate.</p>
</blockquote>
<p>Das mit den FILE ist so eine Sache. Wenn ich eine Datei mit _wfopen() öffne, dann muss ich da diese mode parameter mit angeben. Diese Parameter besagen wie ich auf die Datei zugreife.<br />
Das einzige nützliche flag in diesen Fall für mich wäre</p>
<pre><code>TEXT(&quot;ab+&quot;)
</code></pre>
<p>, was bedeutet, dass die Funktion alles hinten dranhängt(a = append).</p>
</blockquote>
<p>Ich würde ja eher auf fopen() und &quot;rb+&quot; tippen. ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1077561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1077561</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Wed, 14 Jun 2006 12:30:16 GMT</pubDate></item></channel></rss>