文章作者:风泽[E.S.T]
信息来源:邪恶八进制 中国
由于这个文章太简单太简单,偶都不好意思发了。
但看着最近么什么原创的东西,所以就拿出来充充数了。
别打我,我会伤心的。
参考了WINSHELL的部分代码,本来想突破防火墙的,因为技术原因没能继续写下去,现在想到一种方法,但又没时间写了。唉~~~
自己玩
下载
----风泽[E.S.T]
现在互连网上的资源是应有尽有,把这些软件
下载到自己的计算机上慢慢查看是每个网虫每天必须做的一件事。相应的也就出现了很多功能丰富的
下载软件,但您有没有自己想过自己写一个
下载程序?LET'S GO!今天我就带大家来实现一个功能非常简单的
下载程序。
开发环境:WINDOWS 2000 + VC++6.0
使用语言:C
实现功能:
下载网络资源
首先我们要建立一个文件夹来存放
下载的软件,利用Directory();就可以轻松实现。代码如下:
中国网管联盟bitsCN.com int Directory()
{
//建立目录,如果成功返回1,不成功返回0
int D;
D=CreateDirectory("c:\\mydownload",NULL);
return D;
}
当文件夹存在时,函数将什么也不做,达到文件夹不存在时建立文件夹的目的。
我们利用URLDownloadToFile();这个函数来实现
下载,我们来简单的看一下这个函数的简单介绍:
URLDownloadToFile函数原型:
HRESULT URLDownloadToFile(
LPUNKNOWN pCaller,
LPCTSTR szURL,
LPCTSTR szFileName,
DWORD dwReserved,
LPBINDSTATUSCALLBACK lpfnCB
);
这个API是在URLMON.DLL文件中的一个导出函数,简单的实现了把一个文件从WEB服务器
下载本机的功能,其实用这个函数还可以帮我们处理了断点续传,缓存等等的功能。
URLDownloadToFile的五个参数:
第一个 一般为NULL。
网管论坛bbs_bitsCN_com
第二个 参数就是要
下载文件的目标URL,完整路径。
第三个 是本地保存路径,也是完整路径。
第四个 是保留,必须为0。
第五个 是指向一个IBindStatusCallback接口的指针,这就类似一种回调机制,你可以参考这些来活动当前
下载进度,选择是否继续
下载等等.
在这个简单的程序我们只关心第二和第三个参数,其他的通通设置成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); // 获取
下载路径中的文件名
网管论坛bbs_bitsCN_com
while(tk!=NULL)
{
filename=tk;
tk=strtok(NULL,st);
}
strcpy(path,"c:\\mydownload\\"); //将"c:\\mydownload\\"拷贝到PATH中
strcat(path,filename); //连接字符串,得到完整保存路径
if(file(path)) //调用判断文件名是否重名函数
{
printf("连接中……\n");
h= URLDownloadToFile(0,downurl,path,0,0); //
下载文件
if(h==S_OK) //判断是否
下载完成
{
printf("文件
下载成功!\n");
printf("文件保存路径:%s\n",path);
return reslut; //函数返回0
}
else
{
reslut=1;
return reslut; //函数返回1
网管下载dl.bitscn.com }
}
else
{
exit(0);
}
}
根据函数返回值我们来进行判断:
i=downfile(u);
if(i==0)
{
printf("谢谢使用。\n");
}
else
{
printf("\n未找到
下载文件,请检查
下载地址是否正确\n");
}
程序写到这里功能基本已经实现了,但还有一个文件名重名的问题需要我们处理一下,所以我就写了一个简单的函数来实现判断,代码如下:
int file(char *pathname)
{
//检查
下载文件和保存目录中的文件时候有重复。如果有则询问是否删除。
int ret=1;
char input;
FILE *HI;
if ((HI=fopen(pathname, "r")) == NULL) //打开指定路径的文件
{ //函数返回1
网管u家u.bitscn@com
return ret;
}
else
{
printf("发现重名文件,选择是否删除(Y/N):");
fclose(HI);
input=getche(); //等待输入
printf("\n");
if(input=='y' ||input=='Y') //对输入进行判断
{ //删除文件,返回1
if(DeleteFile(pathname))
//调用删除文件的API函数 DeleteFile();
{
return ret;
}
else
{
GetLastError(); //返回错误信息
}
}
else
{ //函数返回0
ret=0;
return ret;
}
网管论坛bbs_bitsCN_com
}
return ret;
}
好了,简单的
下载软件就基本实现了,现在用VC++编译一下运行看看,我们已经可以从空间上
下载程序了,虽然这个软件的功能远远差于流行的
下载软件,但毕竟是自己亲手写出来的,用起来感觉就是不同啊. :P