国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
MFC中通過CURL 下載,斷點續(xù)傳,
1  獲取 將要下載文件的大小
例如
http;

char *url = "http://softdownload.hao123.com/hao123-soft-online-bcs/soft/L/ludashisetup.zip"
如果是ftp
ftp://192.168.2.200
double downLength(const char* url){
double doubleDownLen=0;
CURL* handle=curl_easy_init();
//curl_easy_setopt(handle, CURLOPT_USERPWD,"guan:123456"); 
curl_easy_setopt(handle,CURLOPT_URL,url);
curl_easy_setopt(handle, CURLOPT_NOBODY, 1L); 
if(curl_easy_perform(handle)==CURLE_OK){
curl_easy_getinfo(handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &doubleDownLen);
return doubleDownLen;
}
else
return 0;
}
獲取下載文件的 文件名 

void getfilename(char* url, char* name){// 輔助函數(shù),用于從URL中獲取文件名
// 找到URL中的最后一個‘/’字符
char* pos = strrchr(url,'/');  //strrchr  是從字符串的最后面開始查找

if(NULL!=pos){
// 將URL中的文件名(從pos+1開始直到字符串結(jié)束)復制到name字符串中
strcpy(name, pos+1);
}     
}
-------------------------  將下載下來的  組合為一個文件


size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
int written = fwrite(ptr, size, nmemb, stream);

nowDownLength+=(size*nmemb);
// ss=GetTickCount();


if(SendFlag==1) //如果 更新 才給進度條發(fā)送消息  一般的下載就不更新

{
::SendMessage(((CTransparentDialogDlg *)AfxGetApp()->GetMainWnd())->m_hWnd,WM_SETPROGRESS,0,0);
}

return written;
}


---------------------- 獲取本地文件大小, 在需要 續(xù)傳的時候 要用到,在需要續(xù)傳的前面,先調(diào)用這個函數(shù)

curl_off_t  localFileLength(char * strLocalFile)
{
struct stat file_info;
//if(stat("./vs2005.rar", &file_info) == 0)
//    獲取本地文件的信息
if(stat(strLocalFile, &file_info) == 0)   // 獲取成功
{
resume=1;
return  file_info.st_size; 
}   
else
{
//AfxMessageBox("vs 2005獲取消息失敗!");
resume=0;
return -1;
}
}
下載文件
CURLcode download(char* url,char* out,int resumeFlag,long localFileLen,int writeFlag=0){       // 待下載文件的URL,下載后的文件名
CURL *curl = NULL;
FILE *fp = NULL;
CURLcode res;
// 調(diào)用函數(shù)庫中的curl_easy_init()函數(shù)完成初始化 
totalDownLength=downLength(url);
/*
char buf[20];
sprintf(buf,"文件總大小 %lf",totalDownLength);
AfxMessageBox(buf);
*/



curl = curl_easy_init();
if (curl)  // 判斷初始化是否成功
{
// 以二進制可寫方式打開文件,保存下載得到的數(shù)據(jù)
if(resumeFlag==1)
{
fp = fopen(out,"ab+");
}
else
{
fp= fopen(out,"wb");

}
// 根據(jù)libcurl的使用方法,設定下載的URL、寫入函數(shù)以及寫入的文件
//curl_easy_setopt(curl, CURLOPT_USERPWD,"guan:123456");
//::Sleep(1000);
curl_easy_setopt(curl, CURLOPT_URL, url);

if(writeFlag==0)
{
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
}
else
{
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_dataDL);
}

// curl_easy_setopt(curl, CURLOPT_RESUME_FROM_LARGE, ); 
//設置http 頭部處理函數(shù)
     //  curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, getcontentlengthfunc);
curl_easy_setopt(curl, CURLOPT_RESUME_FROM_LARGE, resumeFlag?localfilelen:0);

curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
// 調(diào)用curl_easy_perform()函數(shù)執(zhí)行下載操作
res = curl_easy_perform(curl);
// 下載完成,進行最后的清理工作
curl_easy_cleanup(curl);
// 關(guān)閉文件 
fclose(fp);
return res;
}
else{
// 如果初始化失敗,返回相應的錯誤代碼
return CURLE_FAILED_INIT;
}



---------------一個實例
void CTransparentDialogDlg::OnBnClickedBtnstart()
{

char buf[20]={"./vs2005.rar"};
localfilelen=localFileLength(buf);
/*
CString str;
str.Format("本地文件大小 %d",localfilelen);
MessageBox(str);
*/
SendFlag=1;  //  要更新進度條
AfxBeginThread(DownThread,NULL);

}


UINT DownThread(LPVOID p){
char *url =(LPSTR)(LPCTSTR)strDownUrl;
//char *url = "http://softdownload.hao123.com/hao123-soft-online-bcs/soft/L/ludashisetup.zip";
char name[100] = "";
getfilename(url,name);
// 調(diào)用函數(shù)庫所提供函數(shù)實現(xiàn)的download()函數(shù),
// 完成文件的下載

CURLcode res = download(url,name,resume,localfilelen);
// 根據(jù)返回結(jié)果,提示用戶下載成功與否
if(CURLE_OK == res)
{
char buf[20]={0};
ifstream iss("./versionnew.txt");
iss>>buf;

ofstream oss("./version.txt");// 沒有就創(chuàng)建  Version.txt
if(oss)
{
oss<<buf;
}
else
{
AfxMessageBox("寫入當前版本失敗!");
//return ;
}
CTransparentDialogDlg * dlg;
dlg=(CTransparentDialogDlg *) (AfxGetApp()->GetMainWnd());

DeleteFile("./versionnew.txt");


// Sleep(1000);


}
else{

AfxMessageBox(_T("下載失敗"));
}
return 0;
}




本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
libcurl應用:如何把下載內(nèi)容寫入內(nèi)存
linux使用libcurl實現(xiàn)put訪問服務器
cURL函數(shù)庫錯誤碼說明之PHP curl_errno函數(shù) | 一聚教程網(wǎng)
libcurl庫介紹
Post XML file through Http And GetRes
對CURL的一些研究 - ChinaUnix.net
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服