<?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[Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams]]></title><description><![CDATA[<p>Da ich für den Bau eines &quot;Compilers&quot; viele ifstreams/ofstreams öffnen muss, versuche ich eine robuste Möglichkeit zu finden diese auch wieder zu schliessen. Untenstehender Code ist völlig unbrauchbar, da ein ifstream/ofstream immer explizit geschlossen werden muss.</p>
<p>Gibt es hier elegantere Möglichkeiten - wie zB SmartPointer für die Verwaltung von Heapspeicher? Oder schliesst die ifstream/ofstream-Klasse einen geöffneten stream automatisch mittels Dtor nach Verlassen des Scopes?</p>
<p>Danke für eure Hilfe!</p>
<pre><code class="language-cpp">bool parse_file(const std::string&amp; filename) {
  assert(!filename.empty());

  // Open ifstream
  std::ifstream ifs(filename.c_str());
  if (ifs.fail()) {
    errors &lt;&lt; now &lt;&lt; &quot;Cannot find or open file: &quot; &lt;&lt; filename &lt;&lt; &quot;\n&quot;;
    return false;  // Exit with failure
  }

  std::cout &lt;&lt; now &lt;&lt; &quot;Parsing file: &quot; &lt;&lt; filename &lt;&lt; &quot;\n&quot;;

  std::string input;
  boost::match_results&lt;std::string::const_iterator&gt; what;

  // Parse ifstream
  for (int line = 1; !getline(ifs, input, '\n').eof(); ++line) {
    // Trim leading and trailing whitespaces
    boost::algorithm::trim(input);

    // Continue if empty line
    if (input.empty()) continue;

    // Find a match with...
    if (!boost::regex_match(input, what, expression)) {
      errors &lt;&lt; now &lt;&lt; &quot;Error abc: &quot; &lt;&lt; filename &lt;&lt; &quot; (&quot; &lt;&lt; line &lt;&lt; &quot;)\n&quot;;
      ifs.close();
      return false;  // Exit with failure
    }

    // Verify condition...
    if (...) {
      errors &lt;&lt; now &lt;&lt; &quot;Error cde: &quot; &lt;&lt; filename &lt;&lt; &quot; (&quot; &lt;&lt; line &lt;&lt; &quot;)\n&quot;;
      ifs.close();
      return false;  // Exit with failure
    }

    // More tests do be done...
  }

  // Close ifstream
  ifs.close();
  return true;  // Exit with success
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/279806/sicheres-schliessen-eines-geöffneten-istreams-ostreams</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 07:15:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279806.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 Jan 2011 07:44:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Tue, 04 Jan 2011 07:48:33 GMT]]></title><description><![CDATA[<p>Da ich für den Bau eines &quot;Compilers&quot; viele ifstreams/ofstreams öffnen muss, versuche ich eine robuste Möglichkeit zu finden diese auch wieder zu schliessen. Untenstehender Code ist völlig unbrauchbar, da ein ifstream/ofstream immer explizit geschlossen werden muss.</p>
<p>Gibt es hier elegantere Möglichkeiten - wie zB SmartPointer für die Verwaltung von Heapspeicher? Oder schliesst die ifstream/ofstream-Klasse einen geöffneten stream automatisch mittels Dtor nach Verlassen des Scopes?</p>
<p>Danke für eure Hilfe!</p>
<pre><code class="language-cpp">bool parse_file(const std::string&amp; filename) {
  assert(!filename.empty());

  // Open ifstream
  std::ifstream ifs(filename.c_str());
  if (ifs.fail()) {
    errors &lt;&lt; now &lt;&lt; &quot;Cannot find or open file: &quot; &lt;&lt; filename &lt;&lt; &quot;\n&quot;;
    return false;  // Exit with failure
  }

  std::cout &lt;&lt; now &lt;&lt; &quot;Parsing file: &quot; &lt;&lt; filename &lt;&lt; &quot;\n&quot;;

  std::string input;
  boost::match_results&lt;std::string::const_iterator&gt; what;

  // Parse ifstream
  for (int line = 1; !getline(ifs, input, '\n').eof(); ++line) {
    // Trim leading and trailing whitespaces
    boost::algorithm::trim(input);

    // Continue if empty line
    if (input.empty()) continue;

    // Find a match with...
    if (!boost::regex_match(input, what, expression)) {
      errors &lt;&lt; now &lt;&lt; &quot;Error abc: &quot; &lt;&lt; filename &lt;&lt; &quot; (&quot; &lt;&lt; line &lt;&lt; &quot;)\n&quot;;
      ifs.close();
      return false;  // Exit with failure
    }

    // Verify condition...
    if (...) {
      errors &lt;&lt; now &lt;&lt; &quot;Error cde: &quot; &lt;&lt; filename &lt;&lt; &quot; (&quot; &lt;&lt; line &lt;&lt; &quot;)\n&quot;;
      ifs.close();
      return false;  // Exit with failure
    }

    // More tests do be done...
  }

  // Close ifstream
  ifs.close();
  return true;  // Exit with success
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2002074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2002074</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Tue, 04 Jan 2011 07:48:33 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Tue, 04 Jan 2011 07:50:05 GMT]]></title><description><![CDATA[<p>Tomahawk schrieb:</p>
<blockquote>
<p>Oder schliesst die istream/ostream-Klasse einen geöffneten stream automatisch mittels Dtor nach Verlassen des Scopes?</p>
</blockquote>
<p>Ja, wobei du dann nicht weißt, ob das schließen erfolgreich war, aber das scheint dich im Code sowieso nicht zu interessieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2002076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2002076</guid><dc:creator><![CDATA[RockMe]]></dc:creator><pubDate>Tue, 04 Jan 2011 07:50:05 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Tue, 04 Jan 2011 08:16:48 GMT]]></title><description><![CDATA[<p>istream/ostream.close() haben meines Wissens keinen Rückgabewert und Failbits (ios_base::iostate) lese ich schlampigerweise bisher noch nicht aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2002077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2002077</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Tue, 04 Jan 2011 08:16:48 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Tue, 04 Jan 2011 08:19:07 GMT]]></title><description><![CDATA[<p>So vielleicht?</p>
<pre><code class="language-cpp">bool parse_file(const std::string&amp; filename)
{
    using std::ifstream;
    ifstream reader;
    //Funktion soll Exception werfen, wenn Stream nicht okay
    //(parsing Fehler sind sind zu erwarten und sollen keine Exception werfen)
    reader.exceptions ( ifstream::badbit );
    reader.open(filename.c_str());

    std::string line;
    //lesen solange was da is
    while(std::getline(reader, line, '\n'))
    {
        //hier machen, was notwendig ist...
    }
    return true;
    //stream-Objekt wird automatisch geschlossen und zerstoert
}
</code></pre>
<p>Dabei werden Fehler im ifstream über eine Exception gemeldet. Ein fehlgeschlagenes Parsing wird weiterhin über den Rückgabewert abgebacken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2002081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2002081</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 04 Jan 2011 08:19:07 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Tue, 04 Jan 2011 08:45:08 GMT]]></title><description><![CDATA[<p>RockMe schrieb:</p>
<blockquote>
<p>Ja, wobei du dann nicht weißt, ob das schließen erfolgreich war, aber das scheint dich im Code sowieso nicht zu interessieren.</p>
</blockquote>
<p>Wie prüfst du bei einem Aufruf von <code>close()</code> , ob das Schliessen erfolgreich war?</p>
<p>Tachyon schrieb:</p>
<blockquote>
<p>So vielleicht?</p>
</blockquote>
<p>Aber Fehler beim Schliessen erfährst du so auch nicht, sondern nur wenn der Stream während der Benutzung kaputt geht. Es wäre fatal, wenn der Destruktor von <code>std::ifstream</code> eine Exception werfen würde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2002093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2002093</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 04 Jan 2011 08:45:08 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Tue, 04 Jan 2011 08:57:25 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Tachyon schrieb:</p>
<blockquote>
<p>So vielleicht?</p>
</blockquote>
<p>Aber Fehler beim Schliessen erfährst du so auch nicht, sondern nur wenn der Stream während der Benutzung kaputt geht. Es wäre fatal, wenn der Destruktor von <code>std::ifstream</code> eine Exception werfen würde.</p>
</blockquote>
<p>Schließen interessiert eigentlich auch nicht. Ansonsten kann man tatsächlich explizit <code>close()</code> aufrufen und auf <code>badbit</code> prüfen. Das kann für <code>close()</code> aber eigentlich nur gesetzt werden, wenn man keine Datei geöffnet hat (wenn das Öffnen schief geht, ist <code>badbit</code> eh schon gesetzt).<br />
PS: Man kann auch das <code>close</code> vom unterliegenden <code>filebuf</code> aufrufen, und den Rückgabewert prüfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2002096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2002096</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 04 Jan 2011 08:57:25 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Thu, 06 Jan 2011 20:35:12 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>Tachyon schrieb:</p>
<blockquote>
<p>So vielleicht?</p>
</blockquote>
<p>Aber Fehler beim Schliessen erfährst du so auch nicht, sondern nur wenn der Stream während der Benutzung kaputt geht. Es wäre fatal, wenn der Destruktor von <code>std::ifstream</code> eine Exception werfen würde.</p>
</blockquote>
<p>Schließen interessiert eigentlich auch nicht. Ansonsten kann man tatsächlich explizit <code>close()</code> aufrufen und auf <code>badbit</code> prüfen. Das kann für <code>close()</code> aber eigentlich nur gesetzt werden, wenn man keine Datei geöffnet hat (wenn das Öffnen schief geht, ist <code>badbit</code> eh schon gesetzt).</p>
</blockquote>
<blockquote>
<p>Closes the file currently associated with the object, disassociating it from the stream. <strong>Any pending output sequence is written to the physical file</strong>.</p>
</blockquote>
<p>Ich würde mal sagen, dabei kann noch mehr schief gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2003344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003344</guid><dc:creator><![CDATA[RockMe]]></dc:creator><pubDate>Thu, 06 Jan 2011 20:35:12 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Thu, 06 Jan 2011 20:54:25 GMT]]></title><description><![CDATA[<p>Naja, ich würd stark vermuten, dass der Destruktor auch nichts anderes macht als close(). Natürlich muss der Stream beim closen nochmal geflusht werden, sonst wär jda die Datei unvollständig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2003351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003351</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 06 Jan 2011 20:54:25 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Thu, 06 Jan 2011 21:09:01 GMT]]></title><description><![CDATA[<p>Eben, und wenn das Objekt zerstört ist, kannst du nicht mehr prüfen, ob flush funktioniert hat. Wenn du nur close aufrufst schon.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2003354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003354</guid><dc:creator><![CDATA[RockMe]]></dc:creator><pubDate>Thu, 06 Jan 2011 21:09:01 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Fri, 07 Jan 2011 08:33:41 GMT]]></title><description><![CDATA[<p>RockMe schrieb:</p>
<blockquote>
<blockquote>
<p>Closes the file currently associated with the object, disassociating it from the stream. <strong>Any pending output sequence is written to the physical file</strong>.</p>
</blockquote>
<p>Ich würde mal sagen, dabei kann noch mehr schief gehen.</p>
</blockquote>
<p>Noch mehr als wobei? Das einem <code>close</code> implizit ein <code>flush</code> voraus geht, sollte ja wohl klar sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2003438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003438</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 07 Jan 2011 08:33:41 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Fri, 07 Jan 2011 08:51:52 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Noch mehr als wobei?</p>
</blockquote>
<p>Mehr als das was du schreibst.</p>
<p>Tachyon schrieb:</p>
<blockquote>
<p>Ansonsten kann man tatsächlich explizit <code>close()</code> aufrufen und auf <code>badbit</code> prüfen. <strong>Das kann für <code>close()</code> aber eigentlich nur gesetzt werden, wenn man keine Datei geöffnet hat</strong> (wenn das Öffnen schief geht, ist <code>badbit</code> eh schon gesetzt).</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2003444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003444</guid><dc:creator><![CDATA[RockMe]]></dc:creator><pubDate>Fri, 07 Jan 2011 08:51:52 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Fri, 07 Jan 2011 09:01:00 GMT]]></title><description><![CDATA[<p>Was ist falsch, oder was fehlt an der Aussage?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2003448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003448</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 07 Jan 2011 09:01:00 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Fri, 07 Jan 2011 09:06:48 GMT]]></title><description><![CDATA[<p>Das:</p>
<blockquote>
<p>Das ... badbit ... kann für close() aber eigentlich <strong>nur</strong> gesetzt werden, wenn man keine Datei geöffnet hat</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2003450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003450</guid><dc:creator><![CDATA[RockMe]]></dc:creator><pubDate>Fri, 07 Jan 2011 09:06:48 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Fri, 07 Jan 2011 09:13:42 GMT]]></title><description><![CDATA[<p>RockMe schrieb:</p>
<blockquote>
<p>Das:</p>
<blockquote>
<p>Das ... badbit ... kann für close() aber eigentlich <strong>nur</strong> gesetzt werden, wenn man keine Datei geöffnet hat</p>
</blockquote>
</blockquote>
<p>Tja, in der Theorie wäre es schön, wenn es so wäre, dass auch bei Speichermangel <code>badbit</code> gesetzt wird. Leider definiert des Standard das nicht. Das einzige definierte Fehlerverhalten, ist das oben von mir beschriebene.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2003452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003452</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 07 Jan 2011 09:13:42 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Fri, 07 Jan 2011 09:39:17 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Tja, in der Theorie wäre es schön, wenn es so wäre, dass auch bei Speichermangel <code>badbit</code> gesetzt wird. Leider definiert des Standard das nicht. Das einzige definierte Fehlerverhalten, ist das oben von mir beschriebene.</p>
</blockquote>
<p>Dann ist ja ofstream für alles sicherheitsrelevante völlig ungeeignet, wenn man nicht mal prüfen kann, ob irgendwas auf Platte geschreiben wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2003476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003476</guid><dc:creator><![CDATA[RockMe]]></dc:creator><pubDate>Fri, 07 Jan 2011 09:39:17 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Fri, 07 Jan 2011 09:53:21 GMT]]></title><description><![CDATA[<p>RockMe schrieb:</p>
<blockquote>
<p>Dann ist ja ofstream für alles sicherheitsrelevante völlig ungeeignet, wenn man nicht mal prüfen kann, ob irgendwas auf Platte geschreiben wurde.</p>
</blockquote>
<p>Tja, nichts ist jemals einfach...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2003486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003486</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 07 Jan 2011 09:53:21 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Fri, 07 Jan 2011 10:04:49 GMT]]></title><description><![CDATA[<p>Wird das mit dem neuen Standard verbessert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2003491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003491</guid><dc:creator><![CDATA[RockMe]]></dc:creator><pubDate>Fri, 07 Jan 2011 10:04:49 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Fri, 07 Jan 2011 10:24:41 GMT]]></title><description><![CDATA[<p>RockMe schrieb:</p>
<blockquote>
<p>Wird das mit dem neuen Standard verbessert?</p>
</blockquote>
<p>Hmm, ich glaube, ich habe mal wieder Müll erzählt, zumindest zum Teil. Auf gängigen Plattformen dürfte das intern (in std::filebuf) benutzt std::fclose einen Fehler erzeugen, wenn irgendwas schief geht (kein Platz, Datei inzwischen gelöscht, etc.).</p>
<p>Allerdings ist das Verhalten implemntierungsabhängig, weil ja der Filedeskriptor aus allen möglichen Quellen kommen kann und auf allen möglichen Plattformen funktionieren ssoll, und bestimmte Fehler gar nicht auftreten können. Man kann also gar kein eindeutiges Fehlerverhalten definieren.</p>
<p>Auf gängigen Plattformen sollte z.B. auch ein <code>fstream::close()</code> zum Setzten von <code>badbit</code> führen, wenn z.B. kein freier Speicher zum Schreiben des Restpuffers da ist.<br />
Das Problem ist eben, dass man sich nicht darauf verlassen kann. Nur das am Anfang beschriebene Verhalten ist klar definiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2003496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2003496</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 07 Jan 2011 10:24:41 GMT</pubDate></item><item><title><![CDATA[Reply to Sicheres Schliessen eines geöffneten istreams&#x2F;ostreams on Sat, 08 Jan 2011 09:26:26 GMT]]></title><description><![CDATA[<p>Dateioperationen sind ohne spezielle Hilfe vom OS nie verlässlich, egal wie der fstream arbeitet. Das Dateisystem ist eine geteilte Resource.</p>
<p>Andere Anwendungen können z.B. die selbe Datei gleichzeitig öffnen (vielleicht unter Windows nicht, aber mit dem native API dann wahrscheinlich doch), dann kann es passieren dass man 10 Bytes schreibt und die Datei plötzlich 20 Bytes lang ist. Das Filehandle kann dir unterm Schreiben vom OS entzogen werden (probier mal chkdsk /F /V aus). Im Prinzip kann auch das OS zurückmelden, dass die Bytes geschrieben wurden, und dann plötzlich abrauchen ohne dass es wirklich auf der Disk steht. Nicht mal sowas wie FileExists(path) == FileExists(path) ist zwangsläufig immer true, weil es zu race conditions kommen kann.</p>
<p>Ohne spezielle Hilfe und Garantien vom OS sind Dateioperationen nicht verlässlich, und es gibt meiner Meinung nach nichts, was fstream dagegen tun kann. Dafür ist es einfach zu systemfern. Das heißt aber nicht, dass es unbrauchbar, man sollte halt nur kein Datenbanksystem damit programmieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004054</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 08 Jan 2011 09:26:26 GMT</pubDate></item></channel></rss>