Dev-C++을 사용하는 Windows에서 응용 프로그램을 빌드하고 파일을 다운로드하려고합니다. libcurl을 사용하여이 작업을 수행하고 있습니다. 이미 packman을 사용하여 소스 코드를 설치했습니다. 작업 예제 (http://siddhantahuja.wordpress.com/2009/04/12/how-to-download-a-file-from-a-url-and-save-onto-local-directory-in-c-using-libcurl/)를 찾았지만 다운로드가 완료된 후에 파일을 닫지 않습니다. c 또는 C++로 파일을 다운로드하는 방법에 대한 예제를 누군가에게 제공하고 싶습니다. 미리 감사드립니다!C/C++에서 libcurl을 사용하여 파일 다운로드
답변
사용중인 예제가 잘못되었습니다. easy_setopt에 대한 매뉴얼 페이지를 참조하십시오. 이 예에서 write_data는 자체 FILE, * outfile을 사용하고 CURLOPT_WRITEDATA에 지정된 fp는 사용하지 않습니다. 그래서 fp를 닫으면 문제가 발생합니다. 심지어 열리지도 않습니다.
이다가 (테스트 여기가 없습니다 libcurl에) 어떻게 보일지 다소
#include <stdio.h>
#include <curl/curl.h>
/* For older cURL versions you will also need
#include <curl/types.h>
#include <curl/easy.h>
*/
#include <string>
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
size_t written = fwrite(ptr, size, nmemb, stream);
return written;
}
int main(void) {
CURL *curl;
FILE *fp;
CURLcode res;
char *url = "http://localhost/aaa.txt";
char outfilename[FILENAME_MAX] = "C:\\bbb.txt";
curl = curl_easy_init();
if (curl) {
fp = fopen(outfilename,"wb");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
fclose(fp);
}
return 0;
}
업데이트 : @rsethc types.h
및 easy.h
에 의해 제안 현재 컬 버전에 존재하지 않는 더 이상.
나는이 (OSX에서) 시도하지만 난 받고 있어요 :에서 참조 "___gxx_personality_v0": 경고 : '의 char *' 정의되지 않은 심볼 상수 문자열에서 사용되지 않는 변환 부호없는 길이, 부호없는 long, __sFILE *) in ccHRyU1T.o CIE in ccHRyU1T.o ld : 기호를 찾을 수 없습니다. collect2 : ld가 1을 반환했습니다. 종료 상태 제발 도와주세요 !! – TCB13
@ TCB13 내가 쓴 프로그램은 C++가 아니라 C++이다. C로 재 컴파일하면 문제가 없어집니다. – fvu
+1 왜냐하면 코드는 거의 동일하기 때문에 OP가 이것을 대답으로 선택해야한다고 생각하기 때문입니다. – alexy13
관심이있는 사용자는 반환 된 데이터를 추가 처리하지 않으려는 경우 마지막 매개 변수로 NULL을 전달하여 사용자 지정 함수를 작성하지 않아도됩니다.
이 경우 기본 내부 기능이 사용됩니다.
세부
http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTWRITEDATA
예
#include <stdio.h>
#include <curl/curl.h>
int main(void)
{
CURL *curl;
FILE *fp;
CURLcode res;
char *url = "http://stackoverflow.com";
char outfilename[FILENAME_MAX] = "page.html";
curl = curl_easy_init();
if (curl)
{
fp = fopen(outfilename,"wb");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
fclose(fp);
}
return 0;
}
이것은 작동하지 않습니다. Windows. Windows에서 설정해야합니다. CURLOPT_WRITEFUNCTION가 null가 아니면, 크래쉬가 발생한다 https://curl.haxx.se/libcurl/c/CURLOPT_WRITEDATA.html –
@PhilRosenberg 여기 https://curl.haxx.se/libcurl/c/CURLOPT_WRITEFUNCTION부터는 불행한 일입니다.html # DESCRIPTION 명시 적으로 설명 : "콜백 대신 내부 기본 함수를 가져 오려면이 옵션을 NULL로 설정하십시오."그래서 "이 옵션을 설정하면 CURLOPT_WRITEFUNCTION을 사용해야합니다 (예 : libcurl을 win32 DLL로 사용하는 경우). 또는 당신은 충돌을 경험할 것입니다. " 다시 내부 기능이 사용되어야하므로 효과가 없어야합니다. – Petar
- 1. libcurl을 사용하여 디렉토리의 모든 파일 다운로드
- 2. AJAX를 사용하여 파일 다운로드
- 3. Perl을 사용하여 파일 다운로드
- 4. 코코아를 사용하여 파일 다운로드
- 5. httprequest를 사용하여 파일 다운로드
- 6. 파일을 사용하여 파일 다운로드
- 7. GZIP을 사용하여 파일 다운로드
- 8. Python을 사용하여 파일 다운로드
- 9. libcurl을 사용하여 결과 문자열을 저장하려고합니다.
- 10. cygwin에서 libcurl을 사용하여 프로젝트 컴파일
- 11. libcurl을 사용하여 HTTP 대신 디스크 (메모리)에서 파일 보내기
- 12. HttpsURLConnection을 사용하여 xml.gz 파일 다운로드
- 13. .NET을 사용하여 원격 파일 다운로드
- 14. UDP를 사용하여 파일 업로드/다운로드
- 15. CakePHP에서 미디어보기를 사용하여 파일 다운로드
- 16. 자바 스크립트를 사용하여 파일 다운로드
- 17. Wininet을 사용하여 이진 파일 다운로드
- 18. Python을 사용하여 백그라운드에서 파일 다운로드
- 19. PHP와 cURL을 사용하여 파일 다운로드
- 20. PowerShell - WebDAV를 사용하여 파일 다운로드
- 21. Windows를 사용하여 파일 다운로드 IStream
- 22. MIDP 1.0을 사용하여 파일 다운로드
- 23. java를 사용하여 httpclient에서 파일 다운로드?
- 24. PhoneGap을 사용하여 URL에서 파일 시스템으로 파일 다운로드
- 25. 파일 다운로드
- 26. 파일 다운로드
- 27. cURL/libcurl을 사용하여 Amazon S3로 업로드
- 28. OpenSSL을 사용하여 LibCurl을 작성하면 링커 오류가 발생합니다.
- 29. libcurl을 사용하여 SFTP 사이트에 파일이 있는지 확인
- 30. C에서 libCurl을 사용하여 모든 응답 헤더 읽기
나는 당신의 질문을 투표를하고 싶었다, 그러나 당신의 대답은 나를하지에했다. , ccHRyU1T.o WRITE_DATA에 _main (무효 * : –