/// <summary>
/// 下载文件函数
/// </summary>
/// <param name="url">文件地址</param>
/// <param name="sSaveDir">保存下载文件的目录</param>
/// <returns>是否成功</returns>
public static bool StartDownload(string url,string sSaveDir,string sFileName)
{
string LocalPath = sSaveDir +"\\"+ sFileName; if (Directory.Exists(sSaveDir)==false)
{
Directory.CreateDirectory(sSaveDir);
} try
{
Uri u = new Uri(url);
HttpWebRequest mRequest = (HttpWebRequest)WebRequest.Create(u);
mRequest.Method = "GET";
mRequest.ContentType = "application/x-www-form-urlencoded";
mRequest.Timeout = 30000; HttpWebResponse wr = (HttpWebResponse)mRequest.GetResponse(); Stream sIn = wr.GetResponseStream();
FileStream fs = new FileStream(LocalPath, FileMode.Create, FileAccess.Write); long length = wr.ContentLength;
long i = 0;
decimal j=0;
int nReadLen = 0 ;
    
while (i < length)
{
byte[] buffer = new byte[1024];
nReadLen = sIn.Read(buffer, 0, buffer.Length);
if (nReadLen<1024)
{
Console.WriteLine("读取的数据为"+nReadLen+"个字节!!!");
}
i += nReadLen;
fs.Write(buffer, 0, nReadLen );
     
if((i % 1024)==0)
{
j=Math.Round(Convert.ToDecimal((Convert.ToDouble(i)/Convert.ToDouble(length))*100),4);
Console.WriteLine("当前下载文件大小:"+length.ToString()+"字节   当前下载大小:"+i+"字节 下载进度"+j.ToString()+"%");
      
}
else
{
Console.WriteLine("当前下载文件大小:"+length.ToString()+"字节   当前下载大小:"+i+"字节");
}
     
} sIn.Close();
wr.Close();
fs.Close();
return true;
}
catch(System.Exception ex)

Console.WriteLine(ex.Message);
HJG.HJGClass.LogTxt("文件地址:\t"+url+ex.Message,true);
return false; 
}
} 以上代码中mRequest.Timeout = 30000;这个参数的含义是不是说如果超过30秒钟,文件没有下载完就抛出异常吗,函数就返回吗实际操作过程中发现有些图片文件只下载了1k不到,图片不能正常显示,但是函数返回了为true

解决方案 »

  1.   

    Timeout 是进行后续同步请求时使用 GetResponse 方法等待响应以及 GetRequestStream 方法等待流所允许的毫秒数。如果资源在超时期限内未返回,请求将引发 WebException,并将 Status 属性设置为 WebExceptionStatus..::.Timeout。 public bool downfile(string url,string LocalPath)
      {
       try
       {
        Uri u = new Uri(url);
        HttpWebRequest mRequest = (HttpWebRequest)WebRequest.Create(u);
        mRequest.Method = "GET";
        mRequest.ContentType = "application/x-www-form-urlencoded";
        HttpWebResponse wr = (HttpWebResponse)mRequest.GetResponse();
        Stream sIn = wr.GetResponseStream();
        FileStream fs = new FileStream(LocalPath, FileMode.Create, FileAccess.Write);
        long length = wr.ContentLength;
        int i = 0;    
        long j=0;
        byte[] buffer = new byte[1024];
        while ((i = sIn.Read(buffer, 0, buffer.Length)) > 0)
        {
         j+=i;     
         fs.Write(buffer, 0,i);
        }
        sIn.Close();
        wr.Close();
        fs.Close();
        return true;
       }
       catch { return false; }}
      

  2.   

    byte[] buffer = new byte[1024];难道你这句不是为了 限制大小为1024?
    如果不是的话 不妨 换个大小试试
      

  3.   

    另外 timeout 只是响应时间
    只要没有设置的过小 应该没有问题的
      

  4.   


    timeout没有的话
    假如我请求的资源部存在,网络连接超时
    那函数多久才会返回啊