找人看看WEBrequest与WEBrespone的问题

jin20000 2008-06-12 04:44:39
我照着<C#入门经典>(第三版)里面的29章29.4的例子写的,就是控件的名字和变量名有点不同,不知道为什么GETFILE就是要报错!!!!!!!!!
请大家帮我看看,问题在哪,谢谢!!!!!!!!!!!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Net.Sockets;

namespace FTPclient
{
public partial class frmFTPClient : Form
{
private string serverdirectory ;

public void FillDirectoryList(Stream stre)
{
StreamReader strr = new StreamReader(stre);
string str = strr.ReadToEnd();
string[] strl = str.Split('\n');
listFile.DataSource = strl;
strr.Close();
}

public frmFTPClient()
{
InitializeComponent();
}


private void btnOpen_Click(object sender, EventArgs e)
{
Cursor c = this.Cursor;
FtpWebResponse respone = null;
Stream stream = null;
try
{
this.Cursor = Cursors.WaitCursor;
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(txtserver.Text);
request.Credentials = new NetworkCredential(txtuser.Text, txtpwd.Text);
request.Method = WebRequestMethods.Ftp.ListDirectory;
respone = (FtpWebResponse)request.GetResponse();
stream = respone.GetResponseStream();
FillDirectoryList(stream);
serverdirectory = null;
btnGetFile.Enabled = false;
btnOpenDirectory.Enabled = false;
}
catch( Exception ex)
{
MessageBox.Show("ERROE FTP Client");
}
finally
{
if (respone!=null)
respone.Close();
if (stream!=null)
stream.Close();
this.Cursor = c;
}


}

private void btnOpenDirectory_Click(object sender, EventArgs e)
{
FtpWebResponse respone = null;
Stream stream = null;
try
{
string sub = listFile.SelectedValue.ToString().Trim();
serverdirectory += @"/" + sub;
Uri baseuri = new Uri(txtserver.Text);
Uri uri = new Uri(baseuri, serverdirectory);

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
request.Credentials = new NetworkCredential(txtuser.Text, txtpwd.Text);
request.Method = WebRequestMethods.Ftp.ListDirectory;
respone = (FtpWebResponse)request.GetResponse();
stream = respone.GetResponseStream();
FillDirectoryList(stream);
//serverdirectory = null;
//btnGetFile.Enabled = false;
//btnOpenDirectory.Enabled = false;
}
catch (Exception ex)
{
MessageBox.Show("ERROE FTP Client");
}
finally
{
if (respone != null)
respone.Close();
if (stream != null)
stream.Close();
}
}

private void btnGetFile_Click(object sender, EventArgs e)
{
FtpWebResponse respone = null;
Stream instream = null;
Stream outstream = null;
try
{
Uri baseuri = new Uri(txtserver.Text);
string name = listFile.SelectedValue.ToString().Trim();
string fullname = serverdirectory + @"/" + name;
Uri uri = new Uri(baseuri, fullname);

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(txtserver.Text);
request.Credentials = new NetworkCredential(txtuser.Text, txtpwd.Text);
///?????
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.UseBinary = cbusebinary.Checked;
respone = (FtpWebResponse)request.GetResponse();

instream = respone.GetResponseStream();
SaveFileDialog sf = new SaveFileDialog();
sf.FileName = name;
if (sf.ShowDialog() == DialogResult.OK)
{
outstream = File.OpenWrite(sf.FileName);
byte[] buffer = new byte[4096];
int size = 0;
while ((size=instream.Read(buffer,0,4096))>0)
{
outstream.Write(buffer, 0, size);
}
}

//FillDirectoryList(instream);
//serverdirectory = null;
//btnGetFile.Enabled = false;
//btnOpenDirectory.Enabled = false;

}
catch (Exception ex)
{
MessageBox.Show("ERROE FTP Client");
}
finally
{
if (respone != null)
respone.Close();
if (instream != null)
instream.Close();
if (outstream != null)
outstream.Close();
}
}

private void listFile_SelectedIndexChanged(object sender, EventArgs e)
{
btnGetFile.Enabled = true;
btnOpenDirectory.Enabled = true;
}
}
}
...全文
50 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jin20000 2008-06-12
  • 打赏
  • 举报
回复
哦,搞定了,
jin20000 2008-06-12
  • 打赏
  • 举报
回复
也就是btnGetFile_Click事件里,会有错误.
在执行"respone = (FtpWebResponse)request.GetResponse();"的时候,就会跳到
"
catch (Exception ex)
{
MessageBox.Show("ERROE FTP Client");
}
"
提示错误:请求的 URI 对于此 FTP 命令无效。

请教!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
运行环境 .NET Framework2.0 开发工具 Microsoft Visual Studio 2005 二. 部分代码说明(主要讲解异步分析和下载): 异步分析下载采取的策略是同时分析同时下载,即未等待数据全部分析完毕就开始把已经分析出来的图片链接开始下载。下载成功的均在List框链接前面划上了√ ,未能下载的图片有可能是分析错误或者是下载异常。 1. 异步分析部分代码 /// /// 异步分析下载 /// private void AsyncAnalyzeAndDownload(string url, string savePath) { this.uriString = url; this.savePath = savePath; #region 分析计时开始 count = 0; count1 = 0; freq = 0; result = 0; QueryPerformanceFrequency(ref freq); QueryPerformanceCounter(ref count); #endregion using (WebClient wClient = new WebClient()) { AutoResetEvent waiter = new AutoResetEvent(false); wClient.Credentials = CredentialCache.DefaultCredentials; wClient.DownloadDataCompleted += new DownloadDataCompletedEventHandler(AsyncURIAnalyze); wClient.DownloadDataAsync(new Uri(uriString), waiter); //waiter.WaitOne(); //阻止当前线程,直到收到信号 } } /// /// 异步分析 /// protected void AsyncURIAnalyze(Object sender, DownloadDataCompletedEventArgs e) { AutoResetEvent waiter = (AutoResetEvent)e.UserState; try { if (!e.Cancelled && e.Error == null) { string dnDir = string.Empty; string domainName = string.Empty; string uri = uriString; //获得域名 http://www.sina.com/ Match match = Regex.Match(uri, @"((http(s)?://)?)+[\w-.]+[^/]");//, RegexOptions.IgnoreCase domainName = match.Value; //获得域名最深层目录 http://www.sina.com/mail/ if (domainName.Equals(uri

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧