2011-01-12 3 views
3

Ich verwende ifstream, um eine Datei zu öffnen und dann von ihr zu lesen. Mein Programm funktioniert gut, wenn ich den Speicherort der lokalen Datei auf meinem System geben. für zB /root/Desktop/abc.xxx funktioniertC++, Ifstream öffnet lokale Datei, aber keine Datei auf HTTP Server

Aber sobald die Lage auf dem HTTP-Server ist die Datei nicht zu offen. für zB http://192.168.0.10/abc.xxx kann nicht geöffnet werden.

Gibt es Alternativen für ifstream bei Verwendung einer URL-Adresse?

danke.

+0

Ja. Aber so einfach ist es nicht. Der Server muss in der Lage sein, die Anfrage zu bearbeiten. Die Frage ist also, was läuft auf 192.168.0.10 um die Anfrage zu bearbeiten? Betreiben Sie einen Webserver oder einen Server zum Abscheren von Dateien oder andere Dateien, die Dateien von Ihrem Server freigeben? –

Antwort

5

Es gibt keine Dienstprogramme in der C++ - Standardbibliothek für den Zugriff auf Daten über das HTTP-Protokoll.

Es gibt 3rd-Party-Bibliotheken aber: Libwww libcurl

Eine weitere Option ist ein virtuelles Dateisystem zu haben, das Remote-http-Dateien als lokale Dateien abbildet. Auf diese Weise müssen Sie Ihre Anwendung nicht für den Zugriff auf http ändern. So etwas wie http://okmij.org/ftp/HTTP-VFS.html

3

ifstream liest keine Dateien von einem HTTP-Server. Es liest nur lokale Dateien.

+2

Genauer gesagt liest es lokale Dateisysteme, Dateien können sich anderswo befinden, wie in NFS-Fall. –

+0

@ Maxim, ja wahr. Ich glaube, dass Windows oder Linux oder irgendein Betriebssystem eine Option für die Zuordnung von HTTP und FTP in das Dateisystem hatte. – Earlz

+0

Hallo, bitte überprüfen Sie den Code, den ich hinzugefügt habe, das ist der Teil, den ich ändern muss ... – fammi

0

ifstream funktioniert nur mit Dateien, auf die im Dateisystem zugegriffen werden kann, nicht auf Webservern.

+0

Alternative zu ifstream bei der Verwendung von Webadressen? – fammi

+0

Sie müssen Socket-Kommunikation mit dem Webserver durchführen und dann die HTTP-Antwort in Form eines Streams bereitstellen (wenn Sie es in diesem Formular benötigen). – trojanfoe

2

Die f in ifstream ist für file, nicht socket.

Sie müssen eine HTTP GET Request machen und dann die Antwort streamen, das ist eine völlig andere Operation.

Verwenden Sie boost::asio oder ähnliches. [Examples]

aktualisieren

Da der Webserver auf Ihrem lokalen Netzwerk ist durch die IP-Adresse (die Beurteilung - nicht sicher, warum die Leute immer noch darauf bestehen die in diesen stürmischen Tagen von DNS in Verwendung, aber das ist durch die von), könnten Sie wahrscheinlich das Dateisystem mit der gewünschten Datei auf Ihrem lokalen Rechner mounten, mit NFS oder ähnlichem. Dann könnten Sie Datei Operationen durchführen, wie ein Lesen mit ifstream.

Verwandte Themen