<?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[Favicon in Datei speichern]]></title><description><![CDATA[<p>Ich möchte das Icon von einer Website in einer Datei speichern. Dafür habe ich ein boost asio Beispiel benutzt, leider ist die Datei unlesbar. Mache ich schon etwas beim herunterladen falsch oder liegt es an ofstream?</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;boost/asio.hpp&gt;
#include &lt;boost/array.hpp&gt;

using namespace std;

bool getFaviconFromWebsite( const std::string&amp; address, const std::string&amp; filePath )
{
    boost::asio::io_service io_service;

    boost::asio::ip::tcp::resolver resolver(io_service);
    boost::asio::ip::tcp::resolver::query query( address, &quot;http&quot;);
    boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);

    boost::asio::ip::tcp::socket socket(io_service);
    boost::asio::connect(socket, endpoint_iterator);

    boost::asio::streambuf request;
    std::ostream request_stream( &amp;request );
    request_stream &lt;&lt; &quot;GET /favicon.ico HTTP/1.0\r\n&quot;;
    request_stream &lt;&lt; &quot;Host: &quot; &lt;&lt; address &lt;&lt; &quot;\r\n&quot;;
    request_stream &lt;&lt; &quot;Accept: */*\r\n&quot;;
    request_stream &lt;&lt; &quot;Connection: close\r\n\r\n&quot;;

    boost::asio::write(socket, request);

    boost::asio::streambuf response;
    boost::asio::read_until(socket, response, &quot;\r\n&quot;);

    std::istream response_stream(&amp;response);
    std::string http_version;
    response_stream &gt;&gt; http_version;
    unsigned int status_code;
    response_stream &gt;&gt; status_code;
    std::string status_message;
    std::getline(response_stream, status_message);
    if (!response_stream || http_version.substr(0, 5) != &quot;HTTP/&quot;)
    {
        std::cout &lt;&lt; &quot;HTTP\n&quot;;
        return false;
    }
    if (status_code != 200)
    {
        std::cout &lt;&lt; status_code;
        return false;
    }

    boost::asio::read_until(socket, response, &quot;\r\n\r\n&quot;);
    size_t size = response.size();
    response.consume(size);

    boost::asio::streambuf buffer;

    std::ofstream file( filePath );

    if(!file)
    {
        std::cout &lt;&lt; &quot;!file\n&quot;;
        return false;
    }
    boost::system::error_code error;
    while (boost::asio::read(socket, buffer,
           boost::asio::transfer_at_least(1), error))
    {
        file &lt;&lt; &amp;buffer;
    }
    if (error != boost::asio::error::eof)
    {
        std::cout &lt;&lt; &quot;!read\n&quot;;
        return false;
    }
    return true;
}

int main() try
{
    if(! getFaviconFromWebsite( &quot;www.google.de&quot;, &quot;google.ico&quot; ) )
        std::cout &lt;&lt; &quot;error&quot;;
    else
        std::cout &lt;&lt; &quot;true&quot;;
}
catch ( const boost::system::system_error &amp;e )
{
    boost::system::error_code ec = e.code();
    std::cerr &lt;&lt; ec.value() &lt;&lt; std::endl;
    std::cerr &lt;&lt; ec.category().name() &lt;&lt; std::endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/327615/favicon-in-datei-speichern</link><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Jul 2026 23:53:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327615.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Aug 2014 13:19:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Favicon in Datei speichern on Fri, 22 Aug 2014 13:19:01 GMT]]></title><description><![CDATA[<p>Ich möchte das Icon von einer Website in einer Datei speichern. Dafür habe ich ein boost asio Beispiel benutzt, leider ist die Datei unlesbar. Mache ich schon etwas beim herunterladen falsch oder liegt es an ofstream?</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;boost/asio.hpp&gt;
#include &lt;boost/array.hpp&gt;

using namespace std;

bool getFaviconFromWebsite( const std::string&amp; address, const std::string&amp; filePath )
{
    boost::asio::io_service io_service;

    boost::asio::ip::tcp::resolver resolver(io_service);
    boost::asio::ip::tcp::resolver::query query( address, &quot;http&quot;);
    boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);

    boost::asio::ip::tcp::socket socket(io_service);
    boost::asio::connect(socket, endpoint_iterator);

    boost::asio::streambuf request;
    std::ostream request_stream( &amp;request );
    request_stream &lt;&lt; &quot;GET /favicon.ico HTTP/1.0\r\n&quot;;
    request_stream &lt;&lt; &quot;Host: &quot; &lt;&lt; address &lt;&lt; &quot;\r\n&quot;;
    request_stream &lt;&lt; &quot;Accept: */*\r\n&quot;;
    request_stream &lt;&lt; &quot;Connection: close\r\n\r\n&quot;;

    boost::asio::write(socket, request);

    boost::asio::streambuf response;
    boost::asio::read_until(socket, response, &quot;\r\n&quot;);

    std::istream response_stream(&amp;response);
    std::string http_version;
    response_stream &gt;&gt; http_version;
    unsigned int status_code;
    response_stream &gt;&gt; status_code;
    std::string status_message;
    std::getline(response_stream, status_message);
    if (!response_stream || http_version.substr(0, 5) != &quot;HTTP/&quot;)
    {
        std::cout &lt;&lt; &quot;HTTP\n&quot;;
        return false;
    }
    if (status_code != 200)
    {
        std::cout &lt;&lt; status_code;
        return false;
    }

    boost::asio::read_until(socket, response, &quot;\r\n\r\n&quot;);
    size_t size = response.size();
    response.consume(size);

    boost::asio::streambuf buffer;

    std::ofstream file( filePath );

    if(!file)
    {
        std::cout &lt;&lt; &quot;!file\n&quot;;
        return false;
    }
    boost::system::error_code error;
    while (boost::asio::read(socket, buffer,
           boost::asio::transfer_at_least(1), error))
    {
        file &lt;&lt; &amp;buffer;
    }
    if (error != boost::asio::error::eof)
    {
        std::cout &lt;&lt; &quot;!read\n&quot;;
        return false;
    }
    return true;
}

int main() try
{
    if(! getFaviconFromWebsite( &quot;www.google.de&quot;, &quot;google.ico&quot; ) )
        std::cout &lt;&lt; &quot;error&quot;;
    else
        std::cout &lt;&lt; &quot;true&quot;;
}
catch ( const boost::system::system_error &amp;e )
{
    boost::system::error_code ec = e.code();
    std::cerr &lt;&lt; ec.value() &lt;&lt; std::endl;
    std::cerr &lt;&lt; ec.category().name() &lt;&lt; std::endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2414592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2414592</guid><dc:creator><![CDATA[unwissendernarr]]></dc:creator><pubDate>Fri, 22 Aug 2014 13:19:01 GMT</pubDate></item><item><title><![CDATA[Reply to Favicon in Datei speichern on Fri, 22 Aug 2014 13:38:23 GMT]]></title><description><![CDATA[<p>Naja, du schreibst die Adresse des Buffers in die Datei, oder?</p>
<pre><code class="language-cpp">file &lt;&lt; &amp;buffer;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2414594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2414594</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 22 Aug 2014 13:38:23 GMT</pubDate></item><item><title><![CDATA[Reply to Favicon in Datei speichern on Fri, 22 Aug 2014 13:51:50 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Naja, du schreibst die Adresse des Buffers in die Datei, oder?</p>
<pre><code class="language-cpp">file &lt;&lt; &amp;buffer;
</code></pre>
</blockquote>
<p>Danke, habe es jetzt vebessert, aber leider ist die Datei immer noch nicht lesbar.</p>
<pre><code>file &lt;&lt; boost::asio::buffer_cast&lt;const char*&gt;( buffer.data() );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2414599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2414599</guid><dc:creator><![CDATA[unwissendernarr]]></dc:creator><pubDate>Fri, 22 Aug 2014 13:51:50 GMT</pubDate></item><item><title><![CDATA[Reply to Favicon in Datei speichern on Fri, 22 Aug 2014 14:03:36 GMT]]></title><description><![CDATA[<p>unwissendernarr schrieb:</p>
<blockquote>
<p>Danke, habe es jetzt vebessert, aber leider ist die Datei immer noch nicht lesbar.</p>
<pre><code>file &lt;&lt; boost::asio::buffer_cast&lt;const char*&gt;( buffer.data() );
</code></pre>
</blockquote>
<p>1. schreibt das nur bis zum ersten '\0', was aber in einer Binärdatei durchaus vorkommen kann<br />
2. muss in den Daten kein '\0' vorkommen, d.h. du schreibst möglicherweise mehr als der Buffer lang ist<br />
3. du darfst nur genau so viele Daten aus dem Buffer schreiben, wie die Leseoperation auch reingeschrieben hat</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2414601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2414601</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 22 Aug 2014 14:03:36 GMT</pubDate></item><item><title><![CDATA[Reply to Favicon in Datei speichern on Fri, 22 Aug 2014 19:21:37 GMT]]></title><description><![CDATA[<p>Du solltest Bilder immer als <em>Binärdatei</em> abspeichern:</p>
<pre><code class="language-cpp">std::ofstream file( filePath, ios::binary );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2414630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2414630</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Fri, 22 Aug 2014 19:21:37 GMT</pubDate></item></channel></rss>