में libcurl का उपयोग कर फ़ाइल डाउनलोड करें मैं एक एप्लिकेशन (देव-सी ++ का उपयोग कर विंडोज़ पर) बना रहा हूं और मैं इसे एक फ़ाइल डाउनलोड करना चाहता हूं। मैं libcurl का उपयोग कर ऐसा कर रहा हूं (मैंने पहले ही पैकमैन का उपयोग कर स्रोत कोड स्थापित किया है)। मुझे एक कामकाजी उदाहरण मिला (http://siddhantahuja.wordpress.com/2009/04/12/how-to-download-a-file-from-a-url-and-save-onto-local-directory-in-c-using-libcurl/) लेकिन डाउनलोड पूर्ण होने के बाद फ़ाइल बंद नहीं होती है। मैं चाहता हूं कि किसी को फ़ाइल डाउनलोड करने के तरीके पर उदाहरण दें, या तो सी या सी ++ में। अग्रिम में धन्यवाद!सी/सी ++
सी/सी ++
उत्तर
उदाहरण जिसका आप उपयोग कर रहे हैं वह गलत है। easy_setopt के लिए मैन पेज देखें। उदाहरण में write_data अपनी फ़ाइल का उपयोग करता है, * आउटफाइल, और FP जो CURLOPT_WRITEDATA में निर्दिष्ट नहीं था। यही कारण है कि बंद एफपी समस्याओं का कारण बनता है - यह भी खोला नहीं है।
यह वह जगह है और अधिक या कम यह कैसा (कोई 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
ने सुझाव दिया वर्तमान cURL संस्करणों में मौजूद नहीं हैं अब और।
मैंने कोशिश की (तहत OSX) इस लेकिन मैं हो रही है: "___gxx_personality_v0", से संदर्भित: चेतावनी: करने के लिए 'चार *' अपरिभाषित प्रतीकों निरंतर स्ट्रिंग से पदावनत रूपांतरण ccHRyU1T.o write_data में _main (शून्य *, ccHRyU1T.o सीसीई में ccHRyU1T.o ld: प्रतीक नहीं मिला संग्रह 2: एलडी 1 निकास स्थिति कृपया मदद करें !! – TCB13
@ टीसीबी 13 कार्यक्रम मैंने लिखा है सी है, सी ++ नहीं। सी के रूप में पुन: संकलित करें और समस्याओं को दूर जाना चाहिए। – fvu
+1 क्योंकि मुझे विश्वास है कि ओपी को इसे उत्तर के रूप में चुना जाना चाहिए था, क्योंकि कोड काफी समान है। – 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;
}
यह काम नहीं करता है विंडोज़। विंडोज़ पर आपको सेट करना होगा CURLOPT_WRITEFUNCTION गैर-शून्य अन्यथा एक क्रैश होता है। Https://curl.haxx.se/libcurl/c/CURLOPT_WRITEDATA.html –
@ फिलिलसेनबर्ग अच्छी तरह से दुर्भाग्यपूर्ण लगता है, क्योंकि यहां https://curl.haxx.se/libcurl/c/CURLOPT_WRITEFUNCTION देखें।एचटीएमएल # विवरण यह स्पष्ट रूप से बताता है: "इस कॉलबैक के बजाय आंतरिक डिफ़ॉल्ट फ़ंक्शन का उपयोग करने के लिए इस विकल्प को NULL पर सेट करें।" तो यह "यदि आप Win32 DLL के रूप में libcurl का उपयोग कर रहे हैं, तो आपको CURLOPT_WRITEFUNCTION का उपयोग करना होगा यदि आप यह विकल्प सेट करते हैं या आप दुर्घटनाओं का अनुभव करेंगे। " इसका कोई प्रभाव नहीं होना चाहिए, क्योंकि फिर से आंतरिक कार्य का उपयोग किया जाना चाहिए। – Petar
- 1. सीसी
- 2. सीसी
- 3. कॉल/सीसी
- 4. सीसी .NET
- 5. मेल सीसी
- 6. ईएसएस/एमैक्स में, मैं सीसी सीजे या सीसी सीआर
- 7. कॉल/सीसी क्या है?
- 8. पीएचपी मेल, सीसी फील्ड
- 9. स्कैला में "कॉल-सीसी" पैटर्न?
- 10. लिनक्स कर्नेल संकलित करते समय सीसी, एलडी और सीसी [एम] आउटपुट जैसे कोड क्या हैं?
- 11. यह जावास्क्रिप्ट वाक्यविन्यास क्या है: {सीआई, सीसी}?
- 12. एफएफएमपीजी चार सीसी एवी कोडेक समर्थन सूची?
- 13. मेकफ़ाइल में सीसी? = क्या मतलब है?
- 14. पीट में डीपी और सीसी कैसे बदलते हैं?
- 15. मेकफ़ाइल में सीसी और एलडी क्या खड़े हैं?
- 16. सीपीएएन को बनाने के लिए पथ और सीसी
- 17. काम करने के लिए सीसी-ट्रे प्राप्त करना
- 18. कोनों को समायोजित करें और छवि को खोलें सीसी
- 19. mountainlion अप्रैल के रूप में इस 'सीसी' कमी
- 20. रिकर्सन लागू करने के लिए कॉल/सीसी का उपयोग करना संभव है?
- 21. Emacs: कैसे स्वचालित रूप से सीसी मोड डेरिवेटिव में कोलन के बाद खाली स्थान शामिल करने
- 22. क्या कोई कारण है कि Google अपनी ओपन सोर्स प्रोजेक्ट्स में सीपीपी के बजाय सीसी एक्सटेंशन का उपयोग करता है?
- 23. सीसी के लिए कोई रास्ता है: माइक्रोसॉफ्ट टीम फाउंडेशन सर्वर में किसी बग/वर्क आइटम पर कोई?
- 24. सिंक जीआईटी और क्लीयरकेस
- 25. संरचना कोड के बारे में तलाश स्पष्टीकरण cyclomatic जटिलता को कम करने के
- 26. क्या मैं .NET 4 कोड अनुबंधों का उपयोग कर सकता हूं और .NET 3.5 के साथ संगत रह सकता हूं?
- 27. मैं नेंट से क्रूज़ कंट्रोल
- 28. Ontology में कक्षाएं/उदाहरण
- 29. मेरी वेबसाइट में CCavenue भुगतान गेटवे को एकीकृत करने के लिए कैसे?
- 30. प्रतिलिपि
मैं आपके सवाल का वोट बढ़ाने के लिए चाहता था, लेकिन अपने जवाब मुझे नहीं करने के लिए बनाया है। –