文件下载的一个类

下载

/// <summary>
/// 下载文件
/// </summary>
public class BDDownLoadFile
{
private string Url; //要下载的文件URL地址
private string SavePath; //要保存的文件的目录
private string errMsg; //保存错误信息
private string RegValue = @"http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";
private string SaveFile; //生成的文件

public BDDownLoadFile(string url,string path)
{
Url = url;
SavePath = path;
this.SaveFile = GetFileName();
}

/// <summary>
/// 返回错误信息
/// </summary>
public string ErrorMessage
{
get
{
return this.errMsg;
}
}

public string GetSaveFile
{
get
{
return this.SaveFile;
}
}
public bool DownLoadFile()
{
bool result = true;
if( !CheckUrl(this.Url) )
{
this.errMsg = "网址不合法!";
return false;
}
WebClient objWC = new WebClient();
objWC.Credentials = CredentialCache.DefaultCredentials;
try
{
byte[] tmpData = objWC.DownloadData(this.Url);
if(tmpData.Length > 0)
{
FileStream objFS = new FileStream(this.SaveFile,FileMode.Create);
objFS.Write(tmpData,0,(int)tmpData.Length); //向文件写入数据
objFS.Close();
this.errMsg = "有数据!";
}
else
{
result = false;
this.errMsg = "没有接收到任何数据!";
}
}
catch(System.Net.WebException e)
{
this.errMsg += "<li>下载数据时发生错误!" + e.Message;
return false;
}
catch(System.UriFormatException e)
{
this.errMsg += "<li>访问的网址无效!" + e.Message;
return false;
}
catch(Exception e)
{
this.errMsg = "错误信息:<li>."+e.Message;
result = false;
}
finally
{
objWC.Dispose();
}
return result;
}

/// <summary>
/// 检查网址是否合法
/// </summary>
/// <param name="chkUrl">要检查的网址</param>
/// <returns></returns>
private bool CheckUrl(string chkUrl)
{
Regex reg = new Regex(RegValue);
Match match = reg.Match(chkUrl);
return match.Success;
}

/// <summary>
/// 取得网址是否有文件,如果有文件,则处理,若没有,则返回.html
/// </summary>
/// <param name="chkUrl"></param>
/// <returns></returns>
private string GetFileType(string chkUrl)
{
if(chkUrl.LastIndexOf("/") == (chkUrl.Length-1)) //没有具体文件
return "html";
int j = 0;
for(int i = 0; i < chkUrl.Length; i++)
{
if(chkUrl.IndexOf("/",i)>-1)
{
i = chkUrl.IndexOf("/",i);
j++;
}
}
if( j < 3)
return "html";
//取得"/"后的字符,然后得出文件类型
string end = chkUrl.Substring(chkUrl.LastIndexOf(".")+1);
switch(end)
{
case "asp":
case "aspx":
case "jsp":
case "php":
return "html";
default:
return end;
}
}

private string GetFileName()
{
string fileName = this.SavePath + "\\" + System.DateTime.Now.Year.ToString()+System.DateTime.Now.Month.ToString()+System.DateTime.Now.Day.ToString()+System.DateTime.Now.Minute.ToString()+System.DateTime.Now.Second.ToString()+Common.MakeRandom(4).ToString()+"."+GetFileType(this.Url);
for(;File.Exists(fileName);)
{
fileName = this.SavePath + "\\" + System.DateTime.Now.Year.ToString()+System.DateTime.Now.Month.ToString()+System.DateTime.Now.Day.ToString()+System.DateTime.Now.Minute.ToString()+System.DateTime.Now.Second.ToString()+Common.MakeRandom(4).ToString()+"\\"+GetFileType(this.Url);
}
return fileName;
}
} //BDDownLoadFile end

时间: 2024-09-28 17:52:20

文件下载的一个类的相关文章

一个类如何实现两个接口中同名同参数不同返回值的函数

假设有如下两个接口: public interface IA{    string GetA(string a);}public interface IB{    int GetA(string a);} 他们都要求实现方法GetA,而且传入的参数都是一样的String类型,只是返回值一个是String一个是Int,现在我们要声明一个类X,这个类要同时实现这两个接口: public class X:IA,IB 由于接口中要求的方法的方法名和参数是一样的,所以不可能通过重载的方式来解决,那么我们该

从反射看委托与事件 委托真的是一个类

关于委托与事件,网上介绍得非常之多,在此不再赘述,本人最近需要捣鼓一些委托,因而对委托进行一 定的寻根究底,故用反射把委托的成员揪出来,且看如下代码: delegate void DelegateDemo(); static event DelegateDemo delHandle; static void Main() { delHandle += new DelegateDemo(MyDelegate_delHandle); MemberInfo[] mis = delHandle.GetT

c++的问题-c++中int是一个类么,c++中int是一个类么,取大神,取大神

问题描述 c++中int是一个类么,c++中int是一个类么,取大神,取大神 c++中int是一个类么,取大神,取大神,c++中int是一个类么,取大神,取大神,c++中int是一个类么,取大神,取大神 解决方案 int是基本类型,不是类.C++也不是完全面向对象的语言. 解决方案二: 不是-------- 解决方案三: 不是的哦,只是基本类型而已 解决方案四: int不是一个类.int是一种数据类型.数据类型就是固定内存大小的别名.int占四个字节.所以你定义一个int型变量,他占四个字节.

java private-java 一个类的对象访问私有属性的问题

问题描述 java 一个类的对象访问私有属性的问题 public class ModifierTest1 { public static void main( String[] args ) { A a = new A(); //System.out.println(a.s); a.f(); } } class A { private int i; private String s; public A() { i = 123; s = "hello"; } public void f(

编程-设计一个类用来表达两张牌的牌组,设计这个类的初始化方式

问题描述 设计一个类用来表达两张牌的牌组,设计这个类的初始化方式 设计一个类表达一组牌,设计牌组的初始化方式 //牌值 private string face; //花色 private string suit; public zupai(string suit, string face) { this.face = face; this.suit = suit; } //牌子 public string getFace() { return face; } //花色 public string

对象的初始化-用函数的返回值初始化一个类对象,这其中用了几次复制构造函数

问题描述 用函数的返回值初始化一个类对象,这其中用了几次复制构造函数 这是我自己写的一段代码#includeusing namespace std;class Example{int num;public:Example(int i){num=i;cout<<""This is construction with parameter.n"";}Example(){num=0;cout<<""This is construc

asp分页的一个类

分页 asp分页的一个类, 在50,000条记录下测试过,速度比ado的那个要快多了 <% '************************************************************************************'具体用法'Set conn=Server.CreateObject("ADODB.Connection")'conn.open "DRIVER={SQL Server};SERVER=(local);UID=s

第三节--定义一个类 -- Classes and Objects in PHP5 [3]

object|php5 /*+-------------------------------------------------------------------------------+| = 本文为Haohappy读<<Core PHP Programming>> | = 中Classes and Objects一章的笔记 | = 翻译为主+个人心得 | = 为避免可能发生的不必要的麻烦请勿转载,谢谢 | = 欢迎批评指正,希望和所有PHP爱好者共同进步! +--------

PHP 5.0对象模型深度探索之定义一个类

当你声明一个类,你需要列出对象应有的所有变量和所有函数-被称为属性和方法.列表1中显示了一个类的构成. 注意在大括号({})内你只能声明变量或者函数.列表2中显示了如何在一个类中定义三个属性和两个方法. 列表1 class Name extends Another Class { Access Variable Declaration Access Function Declaration } 列表2 //定义一个跟踪用户的类 class User { //属性 public $name; pr