C# 下载程序 问题

部分代码如下
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
string URL = this.textBox1.Text;
int n = URL.LastIndexOf('/');//"/"最后一次出现在字符串中的位置
string URLAddress = URL.Substring(0, n);//返回从开始位置起n个字符的长度的字符 网址

string fileName = URL.Substring(n + 1, URL.Length - n - 1);//文件名字
string Dir = this.textBox2.Text;

string Path = Dir + '\\' + fileName;//保存在本地文件夹中的位置

try
{
HttpWebRequest mRequest = (HttpWebRequest)WebRequest.Create(URLAddress);
mRequest.Method = "GET";
mRequest.ContentType = "application/x-www-form-urlencoded";

HttpWebResponse wr = (HttpWebResponse)mRequest.GetResponse();

Stream sIn = wr.GetResponseStream();

FileStream Fs = new FileStream(Path, FileMode.Create, FileAccess.Write);

sIn.Close();
wr.Close();
Fs.Close();
statusBar.Text = "下载完成!";

}

求个明明白白的答案 先谢谢大家了

1 我不觉得你程序有问题。你可以尝试用WebClient代替一下(先不着急,继续看)
2 检查一下你的URLAddress.看看用IE能不能直接打开
3 检查你的IIS,或者是对方服务器是不是开启了默认文档。不要用www.xxx\的形式。用xxx.xxx\index.html 填写完整的uri再尝试下。

4 你的错误意思是,在你运行这一句的时候
HttpWebResponse wr = (HttpWebResponse)mRequest.GetResponse();
对方服务器不允许你访问这个资源。forbidden 403.x都是
意思是,也许有这个文件(或者路径)但是不允许你访问。通常是IIS的身份验证没有达到要求

5 你是局域网访问?对方IIS是不是开了某些认证,比如NTLM活着kerberos?有的话,你从另一台机器打开试试。看看能不能用IE正常打开。打不开,看看服务器NTFS权限,是不是允许所有人访问,IUSER之类的是不是已经添加。

6 如果还是不行,再深入检查。新建一个页面放在wwwroot目录下(默认目录起码没有NTFS问题)然后用默认站点添加一个 aaa.txt(通常没有IIS验证权限配置问题) 再来打开尝试下
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-05-20
403错误,表示你没有浏览的权限
文件夹目录的权限设置.在文件夹上点右键->属性->安全选项卡中添加相应的用户,对于服务器来说你就是internet来宾用户
第2个回答  2009-05-28
72.HTTP下载
/*
using System.Web;
using System.Threading;
using System.IO;
using System.Net;
*/
private WebClient client = new WebClient();
Thread th = new Thread(new ThreadStart(StartDownload));
th.Start();
private void StartDownload()
{
//Start.Enabled = false;
string URL = %%1;
int n = URL.LastIndexOf("/");
string URLAddress = URL.Substring(0, n);
string fileName = URL.Substring(n + 1, URL.Length - n - 1);
string Dir = %%2;
string Path = Dir.ToString() + "\\" + fileName;
try
{
WebRequest myre = WebRequest.Create(URLAddress);
}
catch (WebException exp)
{
MessageBox.Show(exp.Message, "Error");
}
try
{
//statusBar.Text = "开始下载文件...";
client.DownloadFile(URLAddress, fileName);
Stream str = client.OpenRead(URLAddress);
StreamReader reader = new StreamReader(str);
byte[] mbyte = new byte[100000];
int allmybyte = (int)mbyte.Length;
int startmbyte = 0;
//statusBar.Text = "正在接收数据...";
while (allmybyte > 0)
{
int m = str.Read(mbyte, startmbyte, allmybyte);
if (m == 0)
break;
startmbyte += m;
allmybyte -= m;
}
FileStream fstr = new FileStream(Path, FileMode.OpenOrCreate, FileAccess.Write);
fstr.Write(mbyte, 0, startmbyte);
str.Close();
fstr.Close();
//statusBar.Text = "下载完毕!";
MessageBox.Show("下载完毕");
}
catch (WebException exp)
{
MessageBox.Show(exp.Message, "Error");
//statusBar.Text = "";
}
Start.Enabled = true;
}

73.FTP下载
public bool DownloadFile(string RemoteFileName, string LocalPath)
{
return DownloadFile(RemoteFileName, LocalPath, RemoteFileName);
}
/**//// <summary>
/// 从FTP服务器下载文件,指定本地路径和本地文件名
/// </summary>
/// <param name="RemoteFileName">远程文件名</param>
/// <param name="LocalPath">本地路径</param>
/// <param name="LocalFilePath">保存文件的本地路径,后面带有"\"</param>
/// <param name="LocalFileName">保存本地的文件名</param>
public bool DownloadFile(string RemoteFileName, string LocalPath, string LocalFileName)
{
byte[] bt = null;
try
{
if (!IsValidFileChars(RemoteFileName) || !IsValidFileChars(LocalFileName) || !IsValidPathChars(LocalPath))
{
throw new Exception("非法文件名或目录名!");
}
if (!Directory.Exists(LocalPath))
{
throw new Exception("本地文件路径不存在!");
}

string LocalFullPath = Path.Combine(LocalPath, LocalFileName);
if (File.Exists(LocalFullPath))
{
throw new Exception("当前路径下已经存在同名文件!");
}
bt = DownloadFile(RemoteFileName);
if (bt != null)
{
FileStream stream = new FileStream(LocalFullPath, FileMode.Create);
stream.Write(bt, 0, bt.Length);
stream.Flush();
stream.Close();
return true;
}
else
{
return false;
}
}
catch (Exception ep)
{
ErrorMsg = ep.ToString();
throw ep;
}
}

/**//// <summary>
/// 从FTP服务器下载文件,返回文件二进制数据
/// </summary>
/// <param name="RemoteFileName">远程文件名</param>
public byte[] DownloadFile(string RemoteFileName)
{
try
{
if (!IsValidFileChars(RemoteFileName))
{
throw new Exception("非法文件名或目录名!");
}
Response = Open(new Uri(this.Uri.ToString() + RemoteFileName), WebRequestMethods.Ftp.DownloadFile);
Stream Reader = Response.GetResponseStream();

MemoryStream mem = new MemoryStream(1024 * 500);
byte[] buffer = new byte[1024];
int bytesRead = 0;
int TotalByteRead = 0;
while (true)
{
bytesRead = Reader.Read(buffer, 0, buffer.Length);
TotalByteRead += bytesRead;
if (bytesRead == 0)
break;
mem.Write(buffer, 0, bytesRead);
}
if (mem.Length > 0)
{
return mem.ToArray();
}
else
{
return null;
}
}
catch (Exception ep)
{
ErrorMsg = ep.ToString();
throw ep;
}
}
相似回答