<?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[Problem mit ofstream zur Sicherung gegen Stromausfall]]></title><description><![CDATA[<p>Hallo,<br />
Ich sichere einige Daten in einer Datei.<br />
Um sie gegen Stromausfall zu sichern kopiere ich die Datei nach dem schreiben.<br />
Die Dateien werden regelmäßig neu geschrieben.<br />
Eigentlich sollte so sichergestellt sein, dass falls während eines Dateizugriffs der Strom ausfällt, die zweite Datei als Ersatz dient.<br />
Leider sind bei einem Stromausfall während des Schreibens beide Dateien kaputt. (stehen lauter Null-Bytes drin)<br />
Es wird ein XML-Tag serialisiert.<br />
Hier ein Codeausschnitt:</p>
<pre><code>if(XmlFile::Write(filepath, tag, &amp;crypto))
	{
		//bakupdatei anlegen
		string bakfilepath = filepath+&quot;.bak&quot;;
		CopyFile(filepath.c_str(),bakfilepath.c_str(),false);
		return true;
	}
</code></pre>
<pre><code>bool 
XmlFile::Write(const string&amp; fileName, const vector&lt;XmlTag&gt;&amp; contents, XmlCrypto&lt;char&gt;* cryptoObject, const string xmlVersion, const string xmlEncoding)
{
	ofstream file(fileName.c_str(), ios_base::binary);

	stringstream text;

	for_each(contents.begin(), contents.end(), WriteTag(text));

	char ch = 0x0;

	while (text.get(ch))
	{
		if (cryptoObject)
			ch = cryptoObject-&gt;Crypt(ch);

		file &lt;&lt; ch;
	}

	file.flush();
	file.close();

	return true;
}
</code></pre>
<p>Kann mir jemand sagen woran es liegt, dass beide Dateien kaputt sind?<br />
Habe auch schon versucht die datei zweimal zu schreiben anstatt zu kopieren aber es hilft nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/318971/problem-mit-ofstream-zur-sicherung-gegen-stromausfall</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 05:16:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318971.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 02 Aug 2013 10:48:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit ofstream zur Sicherung gegen Stromausfall on Fri, 02 Aug 2013 10:48:34 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Ich sichere einige Daten in einer Datei.<br />
Um sie gegen Stromausfall zu sichern kopiere ich die Datei nach dem schreiben.<br />
Die Dateien werden regelmäßig neu geschrieben.<br />
Eigentlich sollte so sichergestellt sein, dass falls während eines Dateizugriffs der Strom ausfällt, die zweite Datei als Ersatz dient.<br />
Leider sind bei einem Stromausfall während des Schreibens beide Dateien kaputt. (stehen lauter Null-Bytes drin)<br />
Es wird ein XML-Tag serialisiert.<br />
Hier ein Codeausschnitt:</p>
<pre><code>if(XmlFile::Write(filepath, tag, &amp;crypto))
	{
		//bakupdatei anlegen
		string bakfilepath = filepath+&quot;.bak&quot;;
		CopyFile(filepath.c_str(),bakfilepath.c_str(),false);
		return true;
	}
</code></pre>
<pre><code>bool 
XmlFile::Write(const string&amp; fileName, const vector&lt;XmlTag&gt;&amp; contents, XmlCrypto&lt;char&gt;* cryptoObject, const string xmlVersion, const string xmlEncoding)
{
	ofstream file(fileName.c_str(), ios_base::binary);

	stringstream text;

	for_each(contents.begin(), contents.end(), WriteTag(text));

	char ch = 0x0;

	while (text.get(ch))
	{
		if (cryptoObject)
			ch = cryptoObject-&gt;Crypt(ch);

		file &lt;&lt; ch;
	}

	file.flush();
	file.close();

	return true;
}
</code></pre>
<p>Kann mir jemand sagen woran es liegt, dass beide Dateien kaputt sind?<br />
Habe auch schon versucht die datei zweimal zu schreiben anstatt zu kopieren aber es hilft nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342914</guid><dc:creator><![CDATA[claine88]]></dc:creator><pubDate>Fri, 02 Aug 2013 10:48:34 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ofstream zur Sicherung gegen Stromausfall on Fri, 02 Aug 2013 11:06:50 GMT]]></title><description><![CDATA[<p>flush ist schon die richtige Wahl. Leider bedeuted nur, dass der Puffer geleert und dem Dateisystem zum schreiben ueberlassen wurde. Wenn das Betriebssystem/Dateisystem selbst noch puffert, gehen beim Stromausfall die Daten verloren.</p>
<p>Das Problem kann nur mit betriebsspezifischen Funktionen entschaerft werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342916</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 02 Aug 2013 11:06:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ofstream zur Sicherung gegen Stromausfall on Fri, 02 Aug 2013 11:46:34 GMT]]></title><description><![CDATA[<p>Mach statt copy lieber rename. Das geht schneller. Da du die alte Datei eh danach überschreibst brauchst du ja keine Kopie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342922</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 02 Aug 2013 11:46:34 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ofstream zur Sicherung gegen Stromausfall on Tue, 06 Aug 2013 12:28:20 GMT]]></title><description><![CDATA[<p>Mist, stimmt.<br />
Da muss ich mir mal was anderes überlegen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343882</guid><dc:creator><![CDATA[claine]]></dc:creator><pubDate>Tue, 06 Aug 2013 12:28:20 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ofstream zur Sicherung gegen Stromausfall on Tue, 06 Aug 2013 22:05:52 GMT]]></title><description><![CDATA[<p>Stichwort <code>FlushFileBuffers</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2344078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2344078</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 06 Aug 2013 22:05:52 GMT</pubDate></item></channel></rss>