<?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 Rückwärts lesen]]></title><description><![CDATA[<pre><code class="language-cpp">ifstream file(&quot;abc.txt&quot;);
file.seekg(0,ios::end);
</code></pre>
<p>So kann ich den Dateizeiger ja auf das Ende der Datei setzen aber wie kann ich jetzt Rückwärts lesen?</p>
<p>Ich wollte möglichst nicht den ganzen Dateiinhalt im Speicher sichern und dann den Speicher vom Ende aus durchsuchen...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/317210/datei-rückwärts-lesen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Jul 2026 11:25:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/317210.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 31 May 2013 07:50:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datei Rückwärts lesen on Fri, 31 May 2013 07:50:17 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">ifstream file(&quot;abc.txt&quot;);
file.seekg(0,ios::end);
</code></pre>
<p>So kann ich den Dateizeiger ja auf das Ende der Datei setzen aber wie kann ich jetzt Rückwärts lesen?</p>
<p>Ich wollte möglichst nicht den ganzen Dateiinhalt im Speicher sichern und dann den Speicher vom Ende aus durchsuchen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327480</guid><dc:creator><![CDATA[back_w]]></dc:creator><pubDate>Fri, 31 May 2013 07:50:17 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Rückwärts lesen on Fri, 31 May 2013 07:51:57 GMT]]></title><description><![CDATA[<p>mich wuerde spontan der Use case interessieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327481</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 31 May 2013 07:51:57 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Rückwärts lesen on Fri, 31 May 2013 08:40:08 GMT]]></title><description><![CDATA[<p>Posix bietet hier mmap an, damit dürfte das ziemlich einfach und performant gehen.</p>
<p>Ansonsten mit seekg in Chunks arbeiten, erst die letzten 20MB auslesen, dann die vorletzten, etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327491</guid><dc:creator><![CDATA[chunky]]></dc:creator><pubDate>Fri, 31 May 2013 08:40:08 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Rückwärts lesen on Fri, 31 May 2013 09:40:43 GMT]]></title><description><![CDATA[<p>Ganz pauschal: Wenn du einfach die komplette Datei Rückwärts in einem String haben willst, dann nimmst du den Streambuf und schiebst in den String nacheinander mit <code>sungetc</code> rein.</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;sstream&gt;

int main()
{
    std::istringstream stream(&quot;abcdefg&quot;);
    stream.seekg( 0, std::ios_base::end );

    std::streambuf* rdbuf = stream.rdbuf();
    std::string str;

    typedef std::istringstream::traits_type traits;
    traits::int_type i;
    while( !traits::eq_int_type( i = rdbuf-&gt;sungetc(), traits::eof() ) )
        str.push_back( traits::to_char_type(i) );

    std::cout &lt;&lt; str;
}
</code></pre>
<p>Aber wie ich jetzt verstehe, wird bei diesem Vorgehen ja genau das gemacht - die Datei wird komplett in den Speicher geladen, was du ja nicht willst. Dann bietet sich die Version mit Chunks an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327501</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 31 May 2013 09:40:43 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Rückwärts lesen on Fri, 31 May 2013 09:53:28 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Ganz pauschal: Wenn du einfach die komplette Datei Rückwärts in einem String haben willst, dann nimmst du den Streambuf und schiebst in den String nacheinander mit <code>sungetc</code> rein.</p>
</blockquote>
<p>Ganz pauschal: NEIN!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327502</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 31 May 2013 09:53:28 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Rückwärts lesen on Fri, 31 May 2013 10:25:13 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>NEIN!</p>
</blockquote>
<p>Nein? Willst du es lieber direkt mit dem <code>istream</code> ? Ist doch aber irre lahm, wenn intern noch ein <code>sentry</code> instantiiert wird usw.</p>
<pre><code>std::istringstream stream(&quot;abcdefg&quot;);
    stream.seekg( 0, std::ios_base::end );

    std::string str;
    while( stream.unget().good() )
        str.push_back( stream.peek() );

    std::cout &lt;&lt; str;
</code></pre>
<p>Edit: <code>std::reverse_copy</code> geht ja leider nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327504</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 31 May 2013 10:25:13 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Rückwärts lesen on Fri, 31 May 2013 10:23:18 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>NEIN!</p>
</blockquote>
<p>Nein?</p>
</blockquote>
<p>Lies doch damit mal eine Datei rückwärts und zeige sie zweichenweise an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327507</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 31 May 2013 10:23:18 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Rückwärts lesen on Fri, 31 May 2013 10:26:27 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/28547">@Sone</a>: Wenn schon, dann mit einem eigenen streambuf</p>
<pre><code class="language-cpp">class backbuf : public std::streambuf { 
  std::streambuf* sb; 
public: 
  explicit backbuf(std::streambuf *sb)
    : sb(sb) { sb-&gt;sungetc(); }
protected: 
  virtual int_type underflow() { return sb-&gt;sgetc(); } 
  virtual int_type uflow()     { return sb-&gt;sungetc(); } 
};
</code></pre>
<p>Nur leider überschreibt ifstream nicht <code>pbackfail</code> , wie hier nötig.</p>
<p>Da du offensichtlich zu viel Zeit hast, wäre es eine nette Übung für dich, einen <code>pbackfail_aware_ifstream</code> zu schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327508</guid><dc:creator><![CDATA[backbuf]]></dc:creator><pubDate>Fri, 31 May 2013 10:26:27 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Rückwärts lesen on Fri, 31 May 2013 10:43:03 GMT]]></title><description><![CDATA[<p>Sollte nicht <code>filebuf pbackfail</code> überschreiben, wenn überhaupt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327512</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 31 May 2013 10:43:03 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Rückwärts lesen on Fri, 31 May 2013 10:56:46 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Sollte nicht <code>filebuf pbackfail</code> überschreiben, wenn überhaupt?</p>
</blockquote>
<p>Ja, das war eine Sprachungenauigkeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327518</guid><dc:creator><![CDATA[backbuf]]></dc:creator><pubDate>Fri, 31 May 2013 10:56:46 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Rückwärts lesen on Fri, 31 May 2013 12:45:01 GMT]]></title><description><![CDATA[<p>unget (oder die s-Variante) funktioniert doch nur, wenn vorher bereits alles gelesen wurde. D.h. hier würde man im Prinzip alles zwei Mal lesen. Zudem ist nicht garantiert, dass unget beliebig lange funktioniert.</p>
<blockquote>
<p><strong>Attempts</strong> to decrease the current location in the stream by one character, making the last character extracted from the stream once again available to be extracted by input operations.</p>
</blockquote>
<p>Wenn die Datei klein ist, würde ich sie einfach komplett in einen string lesen und über reverse_iterator durchlaufen. Ist zwar nicht super und liest auch alles doppelt, aber eben einfach und fehler-unanfällig.</p>
<p>Man könnte sich auch überlegen, ob man einen Container nutzt, der sehr schnell am Anfang einfügen kann. Dann könnte man jedes get mit einem insert in diesen Container verbinden. Wenn man von Anfang an die Dateigröße kennt, könnte man einen entsprechenden string resizen und eben entsprechend der Position einfügen. Doch auch hier muss man alles auf einmal lesen und... gewinnt vermutlich nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327566</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Fri, 31 May 2013 12:45:01 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Rückwärts lesen on Sat, 01 Jun 2013 07:22:21 GMT]]></title><description><![CDATA[<p>Ok, jetzt reicht es mir. Ich faile nicht nochmal mit Streams. Das <a href="http://www.amazon.de/Standard-Iostreams-Locales-Programmers-Reference/dp/0201183951" rel="nofollow">Meisterbuch</a> ist in einer Woche da, dann werde ich Stream-Experte. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327740</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 01 Jun 2013 07:22:21 GMT</pubDate></item></channel></rss>