当前位置:编程学习 > 网站相关 >>

简单的下载软件的基本实现

由于这个文章太简单太简单,偶都不好意思发了。
但看着最近么什么原创的东西,所以就拿出来充充数了。
别打我,我会伤心的。
参考了WINSHELL的部分代码,本来想突破防火墙的,因为技术原因没能继续写下去,现在想到一种方法,但又没时间写了。唉~~~

                            自己玩下载
                                    ----风泽[E.S.T]
  现在互连网上的资源是应有尽有,把这些软件下载到自己的计算机上慢慢查看是每个网虫每天必须做的一件事。相应的也就出现了很多功能丰富的下载软件,但您有没有自己想过自己写一个下载程序?LETS GO!今天我就带大家来实现一个功能非常简单的下载程序。

开发环境:WINDOWS 2000 + VC++6.0
使用语言:C
实现功能:下载网络资源

  首先我们要建立一个文件夹来存放下载的软件,利用Directory();就可以轻松实现。代码如下:
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。
第二个 参数就是要下载文件的目标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);                 // 获取下载路径中的文件名

  while(tk!=NULL)
      {
        filename=tk;    
        tk=strtok(NULL,st);
      }

    strcpy(path,"c:\mydownload\");     //将"c:\mydownload\"拷贝到PATH中
  strcat(path,filename);               //连接字符串,得到完整保存路径      
   
      if(file(path))               //调用判断文件名是否重名函数
      {
          printf("连接中…… ");
      h= URLDownloadToFile(0,downurl,path,0,0); //下载文件
    if(h==S_OK)                       //判断是否下载完成          
      {
          printf("文件下载成功! ");
      printf("文件保存路径:%s ",path);
      return reslut;                 //函数返回0
      }
        else
        {
        reslut=1;
          return reslut;             //函数返回1
        }

      }
      else
        {
        exit(0);
        }
}

  根据函数返回值我们来进行判断:
        i=downfile(u);
        if(i==0)
        {
          printf("谢谢使用。 ");
        }
            else
              {
              printf(" 未找到下载文件,请检查下载地址是否正确 ");
              }


  程序写到这里功能基本已经实现了,但还有一个文件名重名的问题需要我们处理一下,所以我就写了一个简单的函数来实现判断,代码如下:
int file(char *pathname)
{
//检查下载文件和保存目录中的文件时候有重复。如果有则询问是否删除。

    int ret=1;
    char input;
    FILE *HI;

  if ((HI=fopen(pathname, "r")) == NULL)         //打开指定路径的文件
    {                               //函数返回1
    return ret;
      }
    else
      {
      printf("发现重名文件,选择是否删除(Y/N):");
          fclose(HI);
          input=getche();               //等待输入
    

补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,