ofstream in FTP Verbindung möglich?
-
Hallo zusammen,
mir fehlt quasi ein Denkanstoß und ich hoffe jemand kann mir bei meinem Problem helfen.
Folgende Ist-Situation:
Ich habe ein Programm geschrieben, welches nach einiger interner Aufbereitungen Dateien verschiebt. Läuft wunderbar. Ich bediene mich dabei den IFSTREAMS und OFSTREAMS. Zusätzlich untersuche ich nach dem Verschieben die md5 Summe um sicher zu gehen, dass das Verschieben auch geklappt hat. Wenn ja, dann lösche mir die Quelle.Der eigentliche Verschiebevorgang ist quasi sehr schnell erledigt, hier ein Auszug aus meinem Programm:
// Ausgabe im Binary Modus öffnen, Eingabedatei über Filebuffer kopieren, Ausgabe schließen ofstream fout; fout.open(ausgabe.c_str(), ios::binary); fout<<fin.rdbuf(); fout.close(); // Eingabe Stream schließen fin.close(); // MD5 Hashwert Eingabe und Ausgabe kontrollieren um sicher zustellen, dass Kopiervorgang korrekt gelaufen ist MD5 md5; string md5_eingabe=md5.digestFile(const_cast<char*>(eingabe.c_str())); string md5_ausgabe=md5.digestFile(const_cast<char*>(ausgabe.c_str())); if (md5_eingabe.compare(md5_ausgabe)==0) { // Eingabe löschen remove(eingabe.c_str()); fout_info<<eingabe<<" nach "<<ausgabe<<" verschoben."<<endl; } else { cout<<"Fehler beim Verschieben von "<<eingabe<<" nach "<<ausgabe<<". MD5 Hash nicht identisch."<<endl; fout_info<<"Fehler beim Verschieben von "<<eingabe<<" nach "<<ausgabe<<". MD5 Hash nicht identisch."<<endl; }
Jetzt muss ich das Programm so anpassen, dass es mir Dateien auf einen FTP Server schiebt und anschließend die md5 kontrolliert. Schön wäre es, wenn ich einfach einen OFSTREAM oder IFSTREAM in einer ftp Verbindung öffnen könnte, da der Rest ja quasi schon da ist und ich meine Verschiebe-Methode gerne weiter verwenden möchte.
Ist es prinzipiell möglich, einen OFSTREAM und IFSTREAM in einer FTP Verbindung zu öffnen und zu bearbeiten? Oder ist dies' der komplett falsche Denkansatz was das Kopieren und Verschieben in einer FTP Verbindung angeht?
Jean_Lüc
-
können deine streams tcp?
:p
-
nee, nicht dass ich wüsste. Meine Streams sind normale std::ifstream und std::ofstream... :p
Ich habe gerade mal geschaut. Die Funktion md5.digestFile ist die originale aus der md5.h von RSA. Diese öffnet einen Filestream vom Type FILE aus der stdio.h. Aber auch der kann kein tcp.
Irgendeine Möglichkeit muss es da doch geben. Ich möchte ja einfach nur Dateien uploaden und hinterher gegenchecken, ob der Upload erfolgreich war. Das ist der ganze Sinn der Aktion.
-
http://www.lesnikowski.com/blog/index.php/verify-file-hash-after-ftp-upload/
Theoretisch scheint sowas ja möglich zu sein...
Genau so was suche ich für meine Bedürfnisse.
-
tcp hat schon ne fehlerprüfung drin, wieso doppel moppeln?
-
naja, ich muss jede Nacht 11.000 Dateien übertragen. Derzeit läuft das alles mit dem normalen ftp dos befehl. Die Leitung ist aber so instabil, dass nicht immer alle Dateien übertragen werden.
Deshalb möchte ich schon gerne nach der ganzen Übertragung gegenchecken, ob auch wirklich alles da angekommen wo es soll.
Entweder über eine TCP Checksumme oder halt noch besser über die MD5 Checksumme.
Bin mit TCP nicht so bewandert. Konsolenprogramme OK, die bekomme ich auf die Reihe, aber TCP mäßig habe ich keinerlei Erfahrungen.
Gibt es denn eine gute FTP Klasse, die du mir empfehlen kannst?
-
ne c++ klasse kann ich dir nicht empfehlen, weil ich keine kenne. aber winapi hat ftpputfile oder c# hat FtpWebRequest und so...