网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 网络攻防 > 安全文摘 > 自己玩下载  

自己玩下载

2005-03-25  作者:BitsCN整理  来源:中国网管联盟  点评 投稿 收藏

文章作者:风泽[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

TAGs   下载   自己   //   文件   函数   返回   一个   简单   路径   char   实现      
 上一篇:开发工具大比拼visual c++ vs delphi---(二)   下一篇:在VB中调用Office助手
自己玩下载 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: