Mein problem liegt im Grunde nur darin, dass in der Datei auch "NUL"s enthalten sind. Da die meisten Funktionen Null aber als End Of String kennen, gab es teilweise schon Probleme beim auslesen der Datei, habe es dann aber so gelöst:
PHP Code:
FILE * pFile; pFile = fopen (file.c_str(), "rb" ); string buf; char c; do { c= fgetc (pFile); if (!feof(pFile)) buf+=c; } while (!feof(pFile)); fclose (pFile);
Dadurch wird zumindest die Datei ohne Probleme ausgelesen.
Problem scheint entweder das Empfangen oder das Schreiben zu machen.
Code :
PHP Code:
void Send_Data(char *ip,std::string file) { SOCKET sSocket; int res ; FILE * pFile; long lSize; char * buffer; std::string buf; size_t result;
pFile = fopen (file.c_str(), "rb" );
char c; do { c= fgetc (pFile); if (!feof(pFile)) buf+=c; } while (!feof(pFile));
1. Nur die File Funktionen sehen 0 als Ende
Loesung: Stell den Mode auf Binary/nutze nicht die formatierenden Funktionen, sondern die, die einfach die Daten schreiben, ohne sie als Text zu interpretieren und formatieren oder nimm WinApi
Die Socket Funktionen beachten Nullen eh nicht.
Ich wuerde sagen, es liegt eher dran, dass du es dann in nen std string steckst.
Handelt es sich um ne reine Textdatei?
Dir ist fopen und aehnliches lieber? Ist fstream nicht aehnlich? :P
Naja ich finds bequehmer, abef ist nur meine Meinung ;O
1. Nur die File Funktionen sehen 0 als Ende
Loesung: Stell den Mode auf Binary/nutze nicht die formatierenden Funktionen, sondern die, die einfach die Daten schreiben, ohne sie als Text zu interpretieren und formatieren oder nimm WinApi
Die Socket Funktionen beachten Nullen eh nicht.
Ich wuerde sagen, es liegt eher dran, dass du es dann in nen std string steckst.
Handelt es sich um ne reine Textdatei?
Dir ist fopen und aehnliches lieber? Ist fstream nicht aehnlich? :P
Naja ich finds bequehmer, abef ist nur meine Meinung ;O
Es können allerlei Programme sein, Bilder, Executeables usw.
Momentan habe ich mich auf Bilder vom Typen bmp beschränkt.
Um die Schnelligkeit des Datenverkehrs zu erhöhen, lasse ich die Dateien zuvor mit zlib comprimieren. Das comprimieren und decomprimieren klappt einwandfrei, das Auslesen jetzt auch.
fstream ist mir etwas ungewohnt, ich benutze auch lieber printf als cout.
Ich habe es jetzt mal versucht ohne std:string, aber jetzt kommt leider noch weniger an, habe ich vielleicht einen Denkfehler?
Du wirst wohl kaum in nem Bild einen String finden, also warum printf mit %s? o.ô
Natürlich sucht das nach ner Null und interepretiert sie als Ende.
Zumindest die Ausgabe müsstest du anders schreiben.
Aber ich bin mir sicher, ich verstehe da etwas falsch, denn warum solltest du die Daten eines Bildes als String ausgeben.
Du sagtest doch, du willst ein Bild versenden oder nicht?
Warum behandelst du dann die empfangenen Daten wie einen String?
Nebenbei finde ich die Schleife nicht besonders schön.
Ungeachtet der funktionellen Richtigkeit:
Du wirst wohl kaum in nem Bild einen String finden, also warum printf mit %s? o.ô
Natürlich sucht das nach ner Null und interepretiert sie als Ende.
Ok, das hatte ich mal wieder vergessen.
Quote:
Originally Posted by MrSm!th
Zumindest die Ausgabe müsstest du anders schreiben.
Aber ich bin mir sicher, ich verstehe da etwas falsch, denn warum solltest du die Daten eines Bildes als String ausgeben.
Du sagtest doch, du willst ein Bild versenden oder nicht?
Warum behandelst du dann die empfangenen Daten wie einen String?
Ich lasse den String nur ausgeben, damit ich anschließend sehen kann ob und wieviel erfolgreich ankam. Es ist also mehr ein Test und wird dauerhaft nicht drinnen bleiben.
Quote:
Originally Posted by MrSm!th
Nebenbei finde ich die Schleife nicht besonders schön.
Ungeachtet der funktionellen Richtigkeit:
Wenn du die Daten des Bildes ausgeben willst, um zu sehen, wie viele Bytes erfolgreich versendet wurden, musst du die Bytes in einen String konvertieren.
Sonst wird ja die erste Null im Bild als Null-Terminator interpretiert und du bekommst nur die Hälfte ausgegeben ;O
%X als (wie nennt man die Teile nochmal? o.ô) im sprintf format Parameter und das Byte/Dword wird in den dazugehörigen String konvertiert.
Soweit ich weiß, gibt es keinen für ein ganzes Byte Array, also müsstest du mit einer Schleife jedes Byte in den entsprechenden String konvertieren, sie aneinanderketten und das Ergebnis ausgeben
Quote:
Ja, dass du ein Perfektionist bist, ist mir schon oft aufgefallen, aber dafür funktioniert bei dir auch meistens alles.
Schön wärs, nach jedem erstellten Programm folgen 3 Tage nonstop Hardcore Debugging
(ok, danach funktionierts dann, also hast du evtl doch Recht, welcher nicht perfektionistische Mensch tut sich sowas nach jedem Programm an, nur um jeden noch so kleinen Fehler zu eliminieren )
Kleine Frage an wurstbrot
Quote:
char *filebuffer = new char[filesize+1];
file.read( filebuffer, filesize );
file.close();
new char[filesize+1]
So habe ich das bisher auch immer gemacht, aber mir ist gerade in den Sinn gekommen:
Man nutzt in diesem Falle ja das Char Array als Byte Array und nicht als String, schließlich würde es keinen Sinn machen, eine binäre Datei wie ein Bild als String zu interpretieren.
Ist dann das zusätzliche Byte für den Null-Terminator noch nötig? o.ô Eigentlich doch nicht oder doch?
C++ Dateien per mail versenden 11/03/2010 - C/C++ - 8 Replies ich hab mir ein simples spiel erstellt,
ab und zu tauchen auch da fehler
auf. Damit ich die fehler schnell
korrigieren kann soll die log.txt datei
an mich per mail gesendet werden
C++ (Text-)Dateien hochladen/versenden 07/08/2010 - C/C++ - 53 Replies Hallo erstmal!
Ich bin auf der Suche nach einem Tutorial/ einem Beispielscript oder einfach einer kurzen erklärung, die mir dabei hilft Dateien hoch zu laden!
Eine Erklärung hierzu:
Ich hab einen Bot gemacht und wollte nun als Funktion einbauen, dass man Errors oder ähnliches an mich senden kann.
Also der Bot erstellt bei errors automatisch eine Error.txt und diese würde ich gerne automatisch hochgeladen haben bzw. per E-mail an mich senden lassen!
Dateien versenden 03/05/2010 - AutoIt - 1 Replies Hi :D
Ich habe eine eigene Homepage für Unsere Gilde gemacht.
Und ich wollte ein Bot schreiben den sich die Gildenmitglieder downloaden
können.
Es stehen dort Termine z.b.
"Clantraining am