我們每天都會(huì)在網(wǎng)上下載很多軟件,無(wú)論是辦公軟件還是游戲軟件,都能在網(wǎng)上很輕松的下到本地電腦。那么我們自己能否編寫(xiě)一套下載程序呢?今天,北京北大青鳥(niǎo)學(xué)校就為大家介紹一下如何編寫(xiě)一個(gè)非常簡(jiǎn)單的下載小程序。
開(kāi)發(fā)環(huán)境:WINDOWS 2000 + VC++6.0
使用語(yǔ)言:C
實(shí)現(xiàn)功能:下載網(wǎng)絡(luò)資源
首先我們要建立一個(gè)文件夾來(lái)存放下載的軟件,利用Directory();就可以輕松實(shí)現(xiàn)。代碼如下:
int Directory()
{
//建立目錄,如果成功返回1,不成功返回0
int D;
D=CreateDirectory(c:mydownload,NULL);
return D;
}
當(dāng)文件夾存在時(shí),函數(shù)將什么也不做,達(dá)到文件夾不存在時(shí)建立文件夾的目的。
我們利用URLDownloadToFile();這個(gè)函數(shù)來(lái)實(shí)現(xiàn)下載,我們來(lái)簡(jiǎn)單的看一下這個(gè)函數(shù)的簡(jiǎn)單介紹:
URLDownloadToFile函數(shù)原型:
HRESULT URLDownloadToFile(
LPUNKNOWN pCaller,
LPCTSTR szURL,
LPCTSTR szFileName,
DWORD dwReserved,
LPBINDSTATUSCALLBACK lpfnCB
);(北京北大青鳥(niǎo)學(xué)校)
這個(gè)API是在URLMON.DLL文件中的一個(gè)導(dǎo)出函數(shù),簡(jiǎn)單的實(shí)現(xiàn)了把一個(gè)文件從WEB服務(wù)器下載本機(jī)的功能,其實(shí)用這個(gè)函數(shù)還可以幫我們處理了斷點(diǎn)續(xù)傳,緩存等等的功能。
URLDownloadToFile的五個(gè)參數(shù):
第一個(gè) 一般為NULL。
第二個(gè) 參數(shù)就是要下載文件的目標(biāo)URL,完整路徑。
第三個(gè) 是本地保存路徑,也是完整路徑。
第四個(gè) 是保留,必須為0。
第五個(gè) 是指向一個(gè)IBindStatusCallback接口的指針,這就類(lèi)似一種回調(diào)機(jī)制,你可以參考這些來(lái)活動(dòng)當(dāng)前下載進(jìn)度,選擇是否繼續(xù)下載等等.
在這個(gè)簡(jiǎn)單的程序我們只關(guān)心第二和第三個(gè)參數(shù),其他的通通設(shè)置成0。具體代碼如下:
int downfile(char *downurl)
{
//下載文件保存到c:mydownload目錄下。
HRESULT h;
char *filename;
char *tk;
char url[MAX_PATH];
char path[MAX_PATH];
char st[]=/;
int reslut=0;
strcpy (url,downurl); //將下載路徑拷貝到URL中
tk=strtok(url,st); // 獲取下載路徑中的文件名
while(tk!=NULL)
{
filename=tk;
tk=strtok(NULL,st);
}
strcpy(path,c:mydownload); //將c:mydownload拷貝到PATH中
strcat(path,filename); //連接字符串,得到完整保存路徑
if(file(path)) //調(diào)用判斷文件名是否重名函數(shù)
{
printf(連接中……n);
h= URLDownloadToFile(0,downurl,path,0,0); //下載文件
if(h==S_OK) //判斷是否下載完成
{
printf(文件下載成功!n);
printf(文件保存路徑:%sn,path);
return reslut; //函數(shù)返回0
}
else
{
reslut=1;
return reslut; //函數(shù)返回1
}
}
else
{
exit(0);
}
}(北京北大青鳥(niǎo)學(xué)校)
根據(jù)函數(shù)返回值我們來(lái)進(jìn)行判斷:
i=downfile(u);
if(i==0)
{
printf(謝謝使用。n);
}
else
{
printf(n未找到下載文件,請(qǐng)檢查下載地址是否正確n);
}
(北京北大青鳥(niǎo)學(xué)校,未完)