<?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]fehler beim speichern von binärdaten in cstring]]></title><description><![CDATA[<p>tag an alle,</p>
<p>hab eine funktion geschrieben die Files binär einliest und diese in einem char array speichert, das später die daten über einen socket verschicken soll</p>
<pre><code>char* read_file(char* _path_of_file)
{
	//declare...
	ifstream in;

	char* file;

	//open streams (binary)
 	in.open(_path_of_file, ios_base::in | ios_base::binary );
 	if ( !in )
 	{
 		cerr &lt;&lt; &quot;ERROR ==&gt; file dosent exist !!!&quot; &lt;&lt; endl;
 		exit (1);
 	}

	//get size of file, witch will be send
	in.seekg(0, ios_base::beg);
	in.seekg(0, ios_base::end); 		
	const unsigned long file_size = in.tellg();
	in.seekg(0, ios_base::beg);	

	//allocate memory(HEAP) we need
	file = new char[file_size];

	in.read(file, file_size);

	//kill stream
	in.close();

	return file;
}
</code></pre>
<p>Wenn ich dieser Funktion eine textdatei übergebe, funktioniert alles wunderbar.<br />
Wenn ich aber eine andere datei(bspw mp3) übergebe dann ist die länge des char arrays nur 7 byte gross und die datei dann logischerweise nicht ausführbar.<br />
der inhalt der arrays :</p>
<pre><code>&quot;\177ELF\001\001\001&quot;
</code></pre>
<p>jmd nen plan woran das liegen könnte ?</p>
<p>Danke schonmal<br />
darrel</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204242/fstream-fehler-beim-speichern-von-binärdaten-in-cstring</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 08:50:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204242.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 31 Jan 2008 15:39:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [fstream]fehler beim speichern von binärdaten in cstring on Thu, 31 Jan 2008 15:39:24 GMT]]></title><description><![CDATA[<p>tag an alle,</p>
<p>hab eine funktion geschrieben die Files binär einliest und diese in einem char array speichert, das später die daten über einen socket verschicken soll</p>
<pre><code>char* read_file(char* _path_of_file)
{
	//declare...
	ifstream in;

	char* file;

	//open streams (binary)
 	in.open(_path_of_file, ios_base::in | ios_base::binary );
 	if ( !in )
 	{
 		cerr &lt;&lt; &quot;ERROR ==&gt; file dosent exist !!!&quot; &lt;&lt; endl;
 		exit (1);
 	}

	//get size of file, witch will be send
	in.seekg(0, ios_base::beg);
	in.seekg(0, ios_base::end); 		
	const unsigned long file_size = in.tellg();
	in.seekg(0, ios_base::beg);	

	//allocate memory(HEAP) we need
	file = new char[file_size];

	in.read(file, file_size);

	//kill stream
	in.close();

	return file;
}
</code></pre>
<p>Wenn ich dieser Funktion eine textdatei übergebe, funktioniert alles wunderbar.<br />
Wenn ich aber eine andere datei(bspw mp3) übergebe dann ist die länge des char arrays nur 7 byte gross und die datei dann logischerweise nicht ausführbar.<br />
der inhalt der arrays :</p>
<pre><code>&quot;\177ELF\001\001\001&quot;
</code></pre>
<p>jmd nen plan woran das liegen könnte ?</p>
<p>Danke schonmal<br />
darrel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447096</guid><dc:creator><![CDATA[Darrel]]></dc:creator><pubDate>Thu, 31 Jan 2008 15:39:24 GMT</pubDate></item><item><title><![CDATA[Reply to [fstream]fehler beim speichern von binärdaten in cstring on Thu, 31 Jan 2008 15:51:33 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Bemerkst Du das beim debuggen, wenn file_size nur den wert 7 besitzt, obwohl du eine längere datei eingelesen hast?</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447103</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Thu, 31 Jan 2008 15:51:33 GMT</pubDate></item><item><title><![CDATA[Reply to [fstream]fehler beim speichern von binärdaten in cstring on Thu, 31 Jan 2008 15:54:03 GMT]]></title><description><![CDATA[<p>Ganz unabhängig davon.<br />
Die grösse des erzeugten char arrays (file) musst du auch irgendwie bekannt machen.<br />
Ich meinen nach dem aufruf von read_file hast du einen char* aber du weisst die länge nicht.</p>
<p>Du könntest auch eine std::vector&lt;char&gt; benutzen. Dann ist die Länge schon mit drin.</p>
<p>Gruss Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447108</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Thu, 31 Jan 2008 15:54:03 GMT</pubDate></item><item><title><![CDATA[Reply to [fstream]fehler beim speichern von binärdaten in cstring on Thu, 31 Jan 2008 16:04:49 GMT]]></title><description><![CDATA[<p>simon.gysi schrieb:</p>
<blockquote>
<p>Hallo,<br />
Bemerkst Du das beim debuggen, wenn file_size nur den wert 7 besitzt, obwohl du eine längere datei eingelesen hast?</p>
<p>Simon</p>
</blockquote>
<p>ja, beim debuggen lese ich auch den inhalt des char arrays aus!</p>
<p>EDIT:<br />
bzw nein! wenn ich den ihalt der variable file_size über den debugger abfrage er halte ich auch die richtige dateigrösse.<br />
Erst wenn ich die grösse des rückgabewerts der funktion prüfe, erhalte ich die falsche dateigrösse</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447113</guid><dc:creator><![CDATA[Darrel]]></dc:creator><pubDate>Thu, 31 Jan 2008 16:04:49 GMT</pubDate></item><item><title><![CDATA[Reply to [fstream]fehler beim speichern von binärdaten in cstring on Thu, 31 Jan 2008 16:00:43 GMT]]></title><description><![CDATA[<p>simon.gysi schrieb:</p>
<blockquote>
<p>Ganz unabhängig davon.<br />
Die grösse des erzeugten char arrays (file) musst du auch irgendwie bekannt machen.<br />
Ich meinen nach dem aufruf von read_file hast du einen char* aber du weisst die länge nicht.</p>
<p>Du könntest auch eine std::vector&lt;char&gt; benutzen. Dann ist die Länge schon mit drin.</p>
<p>Gruss Simon</p>
</blockquote>
<p>Ist erstmal unwichtig, da es bei einer txt datei funktioniert ( auch das verschicken über den socket)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447114</guid><dc:creator><![CDATA[Darrel]]></dc:creator><pubDate>Thu, 31 Jan 2008 16:00:43 GMT</pubDate></item><item><title><![CDATA[Reply to [fstream]fehler beim speichern von binärdaten in cstring on Thu, 31 Jan 2008 16:07:13 GMT]]></title><description><![CDATA[<p>Auch wenn du das char array über ein socket verschickst, musst du die länge angeben.</p>
<p>Wie sendest Du?<br />
Wie findest Du ausserhalb der read_file Funktion die Länge heraus?<br />
(strlen???)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447118</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Thu, 31 Jan 2008 16:07:13 GMT</pubDate></item><item><title><![CDATA[Reply to [fstream]fehler beim speichern von binärdaten in cstring on Thu, 31 Jan 2008 16:23:22 GMT]]></title><description><![CDATA[<p>simon.gysi schrieb:</p>
<blockquote>
<p>Auch wenn du das char array über ein socket verschickst, musst du die länge angeben.</p>
<p>Wie sendest Du?<br />
Wie findest Du ausserhalb der read_file Funktion die Länge heraus?<br />
(strlen???)</p>
</blockquote>
<p>jop!</p>
<p>...aber darum geht es ja nicht, weil die rückgabe von read_file ja nicht correkt ist<br />
(ausser bei txt files )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447128</guid><dc:creator><![CDATA[Darrel]]></dc:creator><pubDate>Thu, 31 Jan 2008 16:23:22 GMT</pubDate></item><item><title><![CDATA[Reply to [fstream]fehler beim speichern von binärdaten in cstring on Thu, 31 Jan 2008 16:28:33 GMT]]></title><description><![CDATA[<p>ich denke die rückgabe von read_file ist schon korrekt.<br />
nun, strlen ist dafür gedacht die länge eines null terminierten strings zu ermitteln. d.h. diese funktion prüft nur bis zum ersten 0.<br />
strlen ist nicht für binäre daten gemacht.</p>
<p>Du musst die in read_file ermittelte länge auch &quot;veröffentlichen&quot;.</p>
<p>Edit: Und es ist klar dass es bei Textfiles klappt, denn die speichern ja genau einen solchen (null terminierten) string.</p>
<p>Edit2: Überprüfe doch ob bei der Stelle 7 im File eine 0 steht. z.B. mit einem Hex Editor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447132</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Thu, 31 Jan 2008 16:28:33 GMT</pubDate></item><item><title><![CDATA[Reply to [fstream]fehler beim speichern von binärdaten in cstring on Thu, 31 Jan 2008 16:31:15 GMT]]></title><description><![CDATA[<p>simon.gysi schrieb:</p>
<blockquote>
<p>ich denke die rückgabe von read_file ist schon korrekt.<br />
nun, strlen ist dafür gedacht die länge eines null terminierten strings zu ermitteln. d.h. diese funktion prüft nur bis zum ersten 0.<br />
strlen ist nicht für binäre daten gemacht.</p>
<p>Du musst die in read_file ermittelte länge auch &quot;veröffentlichen&quot;.</p>
<p>Edit: Und es ist klar dass es bei Textfiles klappt, denn die speichern ja genau einen solchen (null terminierten) string.</p>
<p>Edit2: Überprüfe doch ob bei der Stelle 7 im File eine 0 steht. z.B. mit einem Hex Editor.</p>
</blockquote>
<p>ja thx für die hilfe!<br />
du hast natürlich recht, da hätte ich auch selbst drauf kommen können</p>
<p>vielen dank nochmal<br />
gruss darrel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447136</guid><dc:creator><![CDATA[Darrel]]></dc:creator><pubDate>Thu, 31 Jan 2008 16:31:15 GMT</pubDate></item><item><title><![CDATA[Reply to [fstream]fehler beim speichern von binärdaten in cstring on Thu, 31 Jan 2008 17:20:34 GMT]]></title><description><![CDATA[<p>Sicher das du überhaupt (also kommt jetzt auf die Dateigröße an!) die Datei schicken kannst? In einem?</p>
<pre><code class="language-cpp">void read_file(std::string const&amp; file_name, std::string&amp; dest)
{
    std::ifstream file_stream(file_name.c_str(), std::ios_base::binary);
    if (!file_stream) throw std::invalid_argument(&quot;invalid filename&quot;);
    dest = std::string(std::istream_iterator&lt;char&gt;(file_stream), std::istream_iterator&lt;char&gt;());
}
</code></pre>
<p>ließt dir auch den Inhalt der Datei ein <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/1447181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447181</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Thu, 31 Jan 2008 17:20:34 GMT</pubDate></item></channel></rss>