/// <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
/// 下载文件函数
/// </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
{
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; }}
如果不是的话 不妨 换个大小试试
只要没有设置的过小 应该没有问题的
timeout没有的话
假如我请求的资源部存在,网络连接超时
那函数多久才会返回啊