Das google logo.gif ansehen(Http etc.)
-
mal abgesehen das
fstream file("C:\\outlay.gif",fstream::out | fstream::in | fstream::binary | fstream::trunc); file.write(get.c_str(),strlen(get.c_str())); //nicht wirklich erfolg haben wird, da ein gif-bild nicht nur aus alphanumerischen zeichen besteht (was ich meine, "get" ist ein std::string, das verhalten bei steuerzeichen ist nicht unbedingt vorhersehbar, kann sein das er dafür missbraucht werden kann aber das hab ich noch nicht selber getestet)
ich hab was ähnliches gehabt, ich hab ne portweiterleitung gebaut (simples kopieren von socket a nach b) und dabei auch string verwendet, bei bildern isser immer ausgestiegen
dann hab ich einfach nen unsigned char array genomm und das blockweise umgepumpt.
versuch es doch mit einem memorystream btw. jag es doch dierekt in die datei ... schau dir aber mal spasseshalber an WAS in get landet, vielleicht wirste daraus schlau
-
Also sollte ich anstatt string lieber char verwenden oder wie meinst du das?
-
sorry wollt das als antwort machen und nicht editiern, also einmal hochscrollen bitte
und nochwas hinterher
string::size_type loc = get.find( "GIF", 0 ); //Den Http-Header finden... if( loc != string::npos ) { get.erase(0,loc); //...und abschneiden }schlag mich bitte nicht wenn ich jetzt was falsches sage, aber zeigt loc nicht auf den anfang von "GIF" ?? musst du beim schneiden das "GIF" nicht auch noch entfernen .... btw. woher weist du das hinter den erwünschten daten nicht noch irgendwelches zeug übertragen wird (hab den rest nicht ganz vertsanden, kann gut sein das einer der vorhergehenden befehle das eingrenzt)?
-
Danke das werde ich gleich mal ausprobieren. Zu deinem editiertem: Ich habe mir das Logo mal per Firefox heruntergeladen und dann im Editor(Jaa nicht sehr sauber) angesehen und dort sah man das GIF auch noch. Deswegen hab ich angenommen dass das GIF da dran bleiben muss.
-
? Ich weiß gerade nicht die GIF Spezifaktion aber normal steht GIF wahrscheinlich am Anfang ... d.h. wäre das so schon ok weil er halt alles was davor steht nicht haben will ... warum auch immer ^^
-
Wenn ich das mal so sagen darf... dein code ist doch viel zu kompliziert für das was du willst^^ Ich mein das könnten man logger mit der hälfte machen

mfg
-
? Ich weiß gerade nicht die GIF Spezifaktion aber normal steht GIF wahrscheinlich am Anfang ... d.h. wäre das so schon ok weil er halt alles was davor steht nicht haben will ... warum auch immer ^^
Weil davor der HTTP-Header steht und der macht die ganze Datei kaputt deswegen muss der vorher weg.
-
trotzdem, sag doch mal wofür genau du das brauchst, weiles gäbe diverse einfachere möglichkeiten, ein simpler downloadmanager z.b.
-
ICh wollte einfach mal ausprobieren etwas über http herunterzuladen wenn es auch einfacher geht dann würde ich es auch einfacher machen ^^
-
ich hau mich morgen mal dahinter, eigentlich n ganzt interessanter gedanke ^^
was spricht eigentlich gegen rechtsklick bild speichern unter ?
-
ceos schrieb:
was spricht eigentlich gegen rechtsklick bild speichern unter?
Ich finds immer toll, wenn es Menschen gibt die wissen wollen, wie man's selbst macht.
Greetz, Swordfish
-
twitch schrieb:
file.write(get.c_str(),strlen(get.c_str())); //Das funktioniert so nicht. Die Variable get ist ein std::string. Und ein std::string kann (im gegensatz zur Behauptung von Ceos
) sehr wohl mit Steuerzeichen umgehen. strlen allerdings nicht. Ein strlen(get.c_str()) liefert die Anzahl der Bytes bis zum ersten Null-Zeichen, welcher wahrscheinlich in deiner GIF-Datei vorkommt. Um die Länge des Strings zu bekommen, solltest Du get.size() verwenden.Und noch ein Tip: Die http-Header werden von der Zeichenfolge "\r\n\r\n", also eine Leerzeile vom http-Body getrennt. Statt nach "GIF" zu suchen, solltest Du nach dieser Zeichenfolge suchen. Damit bist Du nicht auf GIF beschränkt.
Tntnet
-
ich find solche spitzen echt nett
(im gegensatz zur Behauptung von Ceos
)das nächste mal liesst du dir meinen satz genauer durch
DANKE
das erklärt aber nicht wieso dann bei mir der string nicht funktioniert hat, und ich habe sogar mit dem result von recv(); gearbeitet, mich also garnicht erst mit strlen oder size rumgeschlagen...
dennoch hat mir der string nach ein paar bytes schlicht und einfach die ausgabe verwehrt (und damit mein ich nciht die ausgabe auf dem bildschrim sondern das zeichenweise senden was ich irrtümlicherweise angetrebt hatte, das brach nach knapp 30 zeichen einfach mit zugriffsverletzung ab)
ich habs nicht weiter debuggt sondern einfach n char array angelegt
-
Ceos schrieb:
(was ich meine, "get" ist ein std::string, das verhalten bei steuerzeichen ist nicht unbedingt vorhersehbar, kann sein das er dafür missbraucht werden kann aber das hab ich noch nicht selber getestet)
Ich verstehe diesen Satz so, daß Du uns darüber in Kenntnis setzen willst, daß Du nicht weißt, ob Steuerzeichen im std::string ok sind. Zufällig weiß ich, daß das Verhalten eines std::strings bei Steuerzeichen vorhersebar ist. Nämlich Steuerzeichen inklusive Null-Byte sind im std::string ok. Du kannst beliebige Binärdaten inklusive GIF-Grafiken in einem std::string halten.
Wenn Du Probleme mit Steuerzeichen in einem std::string, dann liegt das nicht am std::string, sondern in der Art und Weise, wie Du damit umgehst. Wäre sicherlich hilfreich, wenn Du die Codesequenz posten könntest, wo Du probleme hattest.
Dennoch entschuldige ich mich, wenn Du Dich angegriffen gefühlt hast. Das war nicht meine Absicht.
Tntnet
-
leider hab ich den code in der form nicht mehr aber mir dämmert da was, kann es sein das c_str() nur bis zu einem \0 geht, ich glaub ich hatte das in der art ausgelesen, hatte dann zwar noch was mit zeichenweise implementiert aber wieder verworfen und hab gleich n kopierarray angelegt