<?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[ifstream faken]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe ein Programm welches &quot;normalerweise&quot; aus mehreren xml-Files Daten holt.</p>
<p>--- ursprünglicher Zustand ---</p>
<pre><code>ifstream infile;
infile.open(XML_filename.c_str());
...
</code></pre>
<p>Dort wo ich das Programm laufen lassen will/muss habe ich keinen Zugriff auf das File-System wo die xml-Files sind. Ich kann aber diese &quot;importieren&quot; und kriege so deren Inhalt als char-Array.</p>
<p>Jetzt muss ich irgendwie den ursprünglichen ifstream durch das char-Array ersetzen. Da die weitere Verarbeitung (xml-parser) der Daten recht komplex (bzw. viel Quellcode und für mich nicht interessant einzuarbeiten da eher nebensächlich) ist versuche ich &quot;einfach&quot; den ifstream zu ersetzen.</p>
<p>Meine Versuche bisher waren:<br />
-- ersetze ifstream durch stringstream ---</p>
<pre><code>importfile(name, chararray);     // Schreibt den Inhalt der xml-Files ins chararray
stringstream infile (stringstream::in | stringstream::out);     // stringstreamobj ersetllen
infile&lt;&lt;chararray;     // chararray ins stringstreamobj schreiben
</code></pre>
<p>Geht nicht, der xml-Parser sagt &quot;no element&quot; (k.A. wieso)<br />
ein &quot;cout&lt;&lt;infile.str();&quot; Schreibt den erwarteten Inhalt der xml-Files auf den Bildschirm.</p>
<p>-- ersetze den streambuffer --</p>
<pre><code>importfile(name, chararray);     // Schreibt den Inhalt der xml-Files ins chararray
stringstream instring stringstream::in | stringstream::out);
infile&lt;&lt;chararray;     // chararray ins stringstreamobj schreiben
ifstream infile;     // ifstreamobj erstellen
infile.rdbuf(instring.rdbuf());     // streambuffer des ifstreamobj durch den des stringstreamobj ersetzen
</code></pre>
<p>bringt den Compilererror &quot; no matching function for call to `fstream::<br />
rdbuf (stringbuf *)'&quot;</p>
<p>Hat jmd ne Lösung/Hinweis für diese Problem? Geht das überhaupt wie ich mir das denke oder gibts nen anderen Weg?</p>
<p>Danke schon mal, Grüße<br />
Markus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264875/ifstream-faken</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 11:23:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264875.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Apr 2010 08:25:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ifstream faken on Wed, 14 Apr 2010 08:25:25 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe ein Programm welches &quot;normalerweise&quot; aus mehreren xml-Files Daten holt.</p>
<p>--- ursprünglicher Zustand ---</p>
<pre><code>ifstream infile;
infile.open(XML_filename.c_str());
...
</code></pre>
<p>Dort wo ich das Programm laufen lassen will/muss habe ich keinen Zugriff auf das File-System wo die xml-Files sind. Ich kann aber diese &quot;importieren&quot; und kriege so deren Inhalt als char-Array.</p>
<p>Jetzt muss ich irgendwie den ursprünglichen ifstream durch das char-Array ersetzen. Da die weitere Verarbeitung (xml-parser) der Daten recht komplex (bzw. viel Quellcode und für mich nicht interessant einzuarbeiten da eher nebensächlich) ist versuche ich &quot;einfach&quot; den ifstream zu ersetzen.</p>
<p>Meine Versuche bisher waren:<br />
-- ersetze ifstream durch stringstream ---</p>
<pre><code>importfile(name, chararray);     // Schreibt den Inhalt der xml-Files ins chararray
stringstream infile (stringstream::in | stringstream::out);     // stringstreamobj ersetllen
infile&lt;&lt;chararray;     // chararray ins stringstreamobj schreiben
</code></pre>
<p>Geht nicht, der xml-Parser sagt &quot;no element&quot; (k.A. wieso)<br />
ein &quot;cout&lt;&lt;infile.str();&quot; Schreibt den erwarteten Inhalt der xml-Files auf den Bildschirm.</p>
<p>-- ersetze den streambuffer --</p>
<pre><code>importfile(name, chararray);     // Schreibt den Inhalt der xml-Files ins chararray
stringstream instring stringstream::in | stringstream::out);
infile&lt;&lt;chararray;     // chararray ins stringstreamobj schreiben
ifstream infile;     // ifstreamobj erstellen
infile.rdbuf(instring.rdbuf());     // streambuffer des ifstreamobj durch den des stringstreamobj ersetzen
</code></pre>
<p>bringt den Compilererror &quot; no matching function for call to `fstream::<br />
rdbuf (stringbuf *)'&quot;</p>
<p>Hat jmd ne Lösung/Hinweis für diese Problem? Geht das überhaupt wie ich mir das denke oder gibts nen anderen Weg?</p>
<p>Danke schon mal, Grüße<br />
Markus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882537</guid><dc:creator><![CDATA[MarkusG]]></dc:creator><pubDate>Wed, 14 Apr 2010 08:25:25 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream faken on Wed, 14 Apr 2010 09:00:51 GMT]]></title><description><![CDATA[<p>wenn du nach dem öffnen des streams nur auf das istream-Interface zugreifst, kannst du dein char-array über std::string in einen istringstream stecken und dann aus dem lesen - ist auch ein istream, genau wie der ifstream.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882563</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 14 Apr 2010 09:00:51 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream faken on Wed, 14 Apr 2010 09:23:06 GMT]]></title><description><![CDATA[<p>Danke pumuckl,</p>
<p>es funktioniert noch nicht ganz, aber es tut sich schon mal was..</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>wenn du nach dem öffnen des streams nur auf das istream-Interface zugreifst,...</p>
</blockquote>
<p>ich gehe davon aus (hoffe es), da im &quot;originalcode&quot; ja auch ein ifstream verwendet wird</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>dein char-array über std::string</p>
</blockquote>
<pre><code>string instring (chararray); // chararray to string
</code></pre>
<p>pumuckl schrieb:</p>
<blockquote>
<p>in einen istringstream stecken</p>
</blockquote>
<pre><code>istringstream infile;
infile.str(instring);
</code></pre>
<p>..und dann aus dem lesen. Jetz sagt der xml-parser (welcher den stream verarbeitet) gar nix mehr (keine (Fehler)-Meldung). Ich muss mich wohl doch in den xml-parser graben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> , oder es gibt noch wo anders ein Problem..</p>
<p>Gruss<br />
Markus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882574</guid><dc:creator><![CDATA[MarkusG]]></dc:creator><pubDate>Wed, 14 Apr 2010 09:23:06 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream faken on Wed, 14 Apr 2010 10:12:08 GMT]]></title><description><![CDATA[<p>hola</p>
<p>probier mal folgendes:</p>
<pre><code class="language-cpp">std::ifstream datei;
std::stringstream strstream; (da tust dein char-array rein)
std::streambuf *old = datei.rdbuf();
datei.rdbuf(strstream.rdbuf());

...
mach deine sachen 
...

datei.rdbuf(old);
</code></pre>
<p>ist ungetestet.</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882610</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Wed, 14 Apr 2010 10:12:08 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream faken on Wed, 14 Apr 2010 10:32:00 GMT]]></title><description><![CDATA[<p>Hey Meep Meep,</p>
<p>das würd etwa dem entsprechen was ich anfangs als &quot;ersetzte den streambuffer&quot; schon mal beschrieben hab.</p>
<p>Er spukt auch die gleiche Fehlermeldung</p>
<pre><code>&quot;no matching function for call to `ifstream::rdbuf (stringbuf *)'&quot;
</code></pre>
<p>aus.<br />
Anscheinend ist der erwartete Übergabewert ein filebuf (wie zu erwarten bei filestream-obj), ich übergebe aber einen stringbuf (da ja stringstream-obj). Auch ich hätte erwartet das die buffer austauschbar sind... offensichtlich aber nicht.</p>
<p>Trotzdem danke <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>
<p>Gruss<br />
Markus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882628</guid><dc:creator><![CDATA[MarkusG]]></dc:creator><pubDate>Wed, 14 Apr 2010 10:32:00 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream faken on Wed, 14 Apr 2010 10:36:03 GMT]]></title><description><![CDATA[<p>ich sollt vllt. noch erwähnen dass dies</p>
<pre><code>datei.rdbuf(strstream.rdbuf());
</code></pre>
<p>der springende Punkt ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882631</guid><dc:creator><![CDATA[MarkusG]]></dc:creator><pubDate>Wed, 14 Apr 2010 10:36:03 GMT</pubDate></item></channel></rss>