<?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[Datei aus größerer Datei auslesen]]></title><description><![CDATA[<p>Was ich tun will, ist anhand einer vorgegebenen Position und Länge aus einer großen Datei eine Reihe von Daten in eine kleinere Teildatei auszugliedern.</p>
<p>Derzeit sieht das so aus:</p>
<pre><code class="language-cpp">void UTF::SaveContent(int pos, int size, char *output_name) {
	// open output stream
	ofstream output(output_name, ios::out | ios::binary);

	// go to start of node's content
	stream-&gt;seekg(pos, ios::beg);
	int pos = stream-&gt;tellg();

	// allocate and fill buffer
	char *buffer = new char[size];
	stream-&gt;get(buffer, size);
	// write buffer to output stream
	output.write(buffer, size);
	// delete the buffer
	delete[] buffer;

	output.close();
}
</code></pre>
<p>Das scheint aber nicht zu gehen. Öffne ich die neue Datei im Hex-Editor, hat sie zwar genau die richtige Länge und auch die ersten Daten werden richtig übernommen, aber ab dem 12. Byte ist alles nur noch mit immer demselben Byte besetzt. Wo ist denn da der Fehler?</p>
<p>Übrigens: geht es auch effizienter, als dass ich erst den gesamten Inhalt in einem Buffer zwischenspeichern muss? Das verdoppelt ja die benötigte Zeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180874/datei-aus-größerer-datei-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 00:37:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180874.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 07 May 2007 15:45:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datei aus größerer Datei auslesen on Mon, 07 May 2007 15:45:03 GMT]]></title><description><![CDATA[<p>Was ich tun will, ist anhand einer vorgegebenen Position und Länge aus einer großen Datei eine Reihe von Daten in eine kleinere Teildatei auszugliedern.</p>
<p>Derzeit sieht das so aus:</p>
<pre><code class="language-cpp">void UTF::SaveContent(int pos, int size, char *output_name) {
	// open output stream
	ofstream output(output_name, ios::out | ios::binary);

	// go to start of node's content
	stream-&gt;seekg(pos, ios::beg);
	int pos = stream-&gt;tellg();

	// allocate and fill buffer
	char *buffer = new char[size];
	stream-&gt;get(buffer, size);
	// write buffer to output stream
	output.write(buffer, size);
	// delete the buffer
	delete[] buffer;

	output.close();
}
</code></pre>
<p>Das scheint aber nicht zu gehen. Öffne ich die neue Datei im Hex-Editor, hat sie zwar genau die richtige Länge und auch die ersten Daten werden richtig übernommen, aber ab dem 12. Byte ist alles nur noch mit immer demselben Byte besetzt. Wo ist denn da der Fehler?</p>
<p>Übrigens: geht es auch effizienter, als dass ich erst den gesamten Inhalt in einem Buffer zwischenspeichern muss? Das verdoppelt ja die benötigte Zeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280401</guid><dc:creator><![CDATA[David Schneider]]></dc:creator><pubDate>Mon, 07 May 2007 15:45:03 GMT</pubDate></item><item><title><![CDATA[Reply to Datei aus größerer Datei auslesen on Mon, 07 May 2007 16:16:42 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void save_content(const std::string&amp; file_in , const std::string&amp; file_out, const std::streampos&amp; pos, const std::size_t&amp; size) 
{
    std::ifstream stream_in(file_in.c_str(), std::ios::in | std::ios::binary);
    std::ofstream stream_out(file_out.c_str(), std::ios::out | std::ios::binary);

    if (!stream_in || !stream_out)
        throw &quot;Could not open!&quot;;

    stream_in.seekg(0, std::ios::beg);
    stream_in.seekg(0, std::ios::end);
    if ((pos + size) &gt; stream_in.tellg())
        throw &quot;Not part of file!&quot;;

    stream_in.seekg(pos, std::ios::beg);
    char* data = new char [size + 1];
    stream_in.read(data, size);
    stream_in.close();
    stream_in[size] = 0;
    stream_out.write(data, size);
    stream_out.close();
    delete [] data;
}
</code></pre>
<p>... was gehtn daran net? <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/1280419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280419</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Mon, 07 May 2007 16:16:42 GMT</pubDate></item><item><title><![CDATA[Reply to Datei aus größerer Datei auslesen on Mon, 07 May 2007 20:12:34 GMT]]></title><description><![CDATA[<p>Ich hatte stream-&gt;get() und stream-&gt;read() vertauscht. Ich weiß zwar nicht genau warum, aber da hat er dann wohl nur 11 Zeichen gelesen und der Rest des Buffers war dann halt einfach nicht gesetzt, also konnte auch beim Schreiben nur Mist rauskommen. Jetzt geht's.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280565</guid><dc:creator><![CDATA[David Schneider]]></dc:creator><pubDate>Mon, 07 May 2007 20:12:34 GMT</pubDate></item></channel></rss>