2011-01-12 2 views
3

ifstream을 사용하여 파일을 열고 읽습니다. 내 시스템에서 로컬 파일 의 위치를 ​​지정하면 프로그램이 정상적으로 작동합니다. 예를 들어 /root/Desktop/abc.xxx에 대한 는 C++, ifstream은 로컬 파일을 열지 만 HTTP 서버에서는 파일을 열지 않습니다.

잘 작동하지만 위치는 HTTP 서버에 일단 파일이 개방에 실패합니다. 예 : http://192.168.0.10/abc.xxx을 열지 못했습니다.

URL 주소를 사용할 때 ifstream에 대한 대안이 있습니까?

감사합니다.

+0

예. 그러나 그렇게 간단하지는 않습니다. 서버는 요청을 처리 할 수 ​​있어야합니다. 그래서 질문은 요청을 처리하기 위해 192.168.0.10에서 실행되는 것입니까? 웹 서버 또는 파일 쉐어링 서버 또는 서버의 파일을 공유하는 다른 것을 실행하고 있습니까? –

답변

5

http 프로토콜을 통해 데이터에 액세스하는 표준 C++ 라이브러리에는 유틸리티가 없습니다.

하지만 제 3 자 라이브러리가 있습니다 Libwww libcurl

또 다른 옵션은 로컬 파일로 원격 HTTP 파일을 매핑하는 가상 파일 시스템을 가지고있다. 이렇게하면 http에 액세스하기 위해 응용 프로그램을 수정할 필요가 없습니다. 예 : http://okmij.org/ftp/HTTP-VFS.html

3

ifstream이 HTTP 서버의 파일을 읽지 않습니다. 로컬 파일 만 읽습니다.

+2

보다 정확하게는 로컬 파일 시스템을 읽으며 NFS의 경우와 같이 파일이 다른 곳에있을 수 있습니다. –

+0

@Maxim, 그렇습니다. Windows 또는 Linux 또는 일부 OS에는 HTTP 및 FTP를 파일 시스템에 매핑 할 수있는 옵션이 있다고 생각합니다. – Earlz

+0

안녕하세요, 내가 추가 한 코드를 확인하십시오.이 부분을 바꿀 필요가 있습니다 ... – fammi

0

ifstream은 웹 서버가 아닌 파일 시스템에서만 액세스 할 수있는 파일에서만 작동합니다.

+0

웹 주소를 사용할 때 ifstream을 대체 할 수 있습니까? – fammi

+0

웹 서버에 소켓 통신을 수행 한 다음 HTTP 응답을 스트림 형식으로 제공해야합니다 (해당 형식이 필요할 경우). – trojanfoe

2

fsocket이 아니라 file입니다.

HTTP GET Request을 작성한 다음 응답을 스트리밍해야합니다. 이는 완전히 다른 작업입니다.

boost::asio 또는 이와 유사한 것을 사용하는 것을 고려하십시오. 확실하지 왜 사람들은 여전히 ​​DNS의 이러한 무모한 일 사람들을 사용하여 주장하지만 의해입니다 - [Examples]

업데이트

웹 서버가 로컬 영역 네트워크에 있기 때문에

합니다 (IP 주소로 판단 by)를 사용하면 NFS 또는 유사한 것을 사용하여 로컬 시스템에 원하는 파일을 포함하는 파일 시스템을 마운트 할 수 있습니다. 그런 다음 파일 작업을 수행 할 수 있습니다. ifstream을 사용하여 읽을 수 있습니다.

관련 문제