在.net 2.0 中使用ftp

 

摘要:本文简单的介绍了在.net 2.0下使用ftp的几种简单的方法,并提供了一个对FtpWebRequest封装的Ftp操作类

在.net 1.1中,如果我们要使用ftp,往往得借助一些第三方类库,虽然这些第三方类库写得也非常好,但说明文档不够详细,以及一些使用习惯问题,往往没有.net自己的库使用地得心应手。现在好了,在.net 2.0 中添加了对许多ftp的支持,使用ftp变得非常简单了。

首先,WebClient支以已经开始支持ftp协议了。

比如说要从远程服务器上下载文件,只要使用两条命令就可以完成。

WebClient webClient = new WebClient();

webClient.DownloadFile("ftp://username:password@192.168.1.1/123.txt", @"f:\123.txt");

上传文件到远程服务器也是一样简单。

WebClient webClient = new WebClient();

webClient.UploadFile("ftp://username:password@192.168.1.1/456.txt", @"f:\123.txt");

上述方法非常简单,并且在大多数情况下也非常有效,但在一些情况下,我们需要一些高级的应用,这时WebClient就不能满足我们的需求了(比如说我现在经常需要以ASII形式从Unix服务器中下载一些文本文件,如果直接WebClient下载就存在文本格式没有转换的问题)。这个时候我们便需要另一个类FtpWebRequest

FtpWebRequest通过ftp协议从 Internet 请求数据。FtpWebRequestHttpWebRequest一样,都是WebRequest的子类,都是基于.NET Framework 的请求/响应模型。下面的代码示例演示如何从 FTP 服务器上删除文件(代码来于MSDN)。

None.gif          public   static   bool  DeleteFileOnServer(Uri serverUri)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
// The serverUri parameter should use the ftp:// scheme. 
InBlock.gif            
// It contains the name of the server file that is to be deleted. 
InBlock.gif            
// Example: ftp://contoso.com/someFile.txt. 
InBlock.gif            
// 
InBlock.gif
            if (serverUri.Scheme != Uri.UriSchemeFtp)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return false;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
// Get the object used to communicate with the server. 
InBlock.gif
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
InBlock.gif            request.Method 
= WebRequestMethods.Ftp.DeleteFile;
InBlock.gif            FtpWebResponse response 
= (FtpWebResponse)request.GetResponse();
InBlock.gif            Console.WriteLine(
"Delete status: {0}", response.StatusDescription);
InBlock.gif            response.Close();
InBlock.gif            
return true;
ExpandedBlockEnd.gif        }

从上述代码中我们可以看到,FtpWebRequestHttpWebRequest的使用方式非常类似。只要将FtpWebRequest的 Method 属性设置为 WebRequestMethods.Ftp 结构中定义的值,就能发送相应的 FTP 命令到服务器,执行相应的操作。

 关于ftp的更多信息,这里就不详作介绍,下面是我用FtpWebRequest对常用的操作进行了一点简单的封装,相信读了下列代码后会对FtpWebRequest有更多的了解的。

None.gif class  FtpClient
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
string userName;
InBlock.gif        
string passWord;
InBlock.gif
InBlock.gif        
byte[] buffer = new byte[1024 * 20];
InBlock.gif
InBlock.gif        
public FtpClient(string userName, string passWord)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
this.userName = userName;
InBlock.gif            
this.passWord = passWord;
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 创建ftp请求信息
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="url">目标url地址</param>
ExpandedSubBlockEnd.gif        
/// <param name="useBinary">是否使用二进制传输</param>

InBlock.gif        private FtpWebRequest GetRequest(string url, bool useBinary)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            FtpWebRequest ftpRequest 
= (FtpWebRequest)WebRequest.Create(url);
InBlock.gif            ftpRequest.Credentials 
= new NetworkCredential(userName, passWord);
InBlock.gif            ftpRequest.UseBinary 
= useBinary;
InBlock.gif            ftpRequest.KeepAlive 
= true;
InBlock.gif            
return ftpRequest;
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private FtpWebRequest GetRequest(string url)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
return GetRequest(url, false);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
string GetStreamText(Stream stream)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            StreamReader reader 
= new StreamReader(stream, Encoding.Default);
InBlock.gif            
string text = reader.ReadToEnd();
InBlock.gif            reader.Close();
InBlock.gif            
return text;
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
//将orgStream中的内容拷贝到desStream中
InBlock.gif
        void WriteStream(Stream orgStream, Stream desStream)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
int num;
InBlock.gif            
while ((num = orgStream.Read(buffer, 0, buffer.Length)) > 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                desStream.Write(buffer, 
0, num);
ExpandedSubBlockEnd.gif            }

InBlock.gif            orgStream.Close();
InBlock.gif            desStream.Close();
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 列出ftp目录所包含的文件信息
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="remoteDir">远程文件夹</param>
ExpandedSubBlockEnd.gif        
/// <returns>文件详细信息</returns>

InBlock.gif        public string ListFiles(string remoteDir)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            FtpWebRequest request 
= GetRequest(remoteDir, false);
InBlock.gif            request.Method 
= WebRequestMethods.Ftp.ListDirectoryDetails;
InBlock.gif            
return GetStreamText(request.GetResponse().GetResponseStream());
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 下载文件
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="localFile">本地文件路径</param>
InBlock.gif        
/// <param name="remoteFile">远程文件路径</param>
ExpandedSubBlockEnd.gif        
/// <param name="useBinary">是否采用二进制方式</param>

InBlock.gif        public void DownloadFile(string localFile, string remoteFile, bool useBinary)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            FtpWebRequest request 
= GetRequest(remoteFile, useBinary);
InBlock.gif            request.Method 
= WebRequestMethods.Ftp.DownloadFile;
InBlock.gif
InBlock.gif            WriteStream(request.GetResponse().GetResponseStream(), File.Create(localFile));
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 上传文件
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="localFile">本地文件路径</param>
InBlock.gif        
/// <param name="remoteFile">远程文件路径</param>
ExpandedSubBlockEnd.gif        
/// <param name="useBinary">是否采用二进制方式</param>

InBlock.gif        public void UploadFile(string localFile, string remoteFile, bool useBinary)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            FileInfo fi 
= new FileInfo(localFile);
InBlock.gif            FtpWebRequest request 
= GetRequest(remoteFile, useBinary);
InBlock.gif            request.Method 
= WebRequestMethods.Ftp.UploadFile;
InBlock.gif            request.ContentLength 
= fi.Length;
InBlock.gif
InBlock.gif            WriteStream(fi.OpenRead(),request.GetRequestStream());
InBlock.gif            request.GetResponse();
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
//删除文件
InBlock.gif
        public void DeleteFile(string remoteFile)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            FtpWebRequest request 
= GetRequest(remoteFile);
InBlock.gif            request.Method 
= WebRequestMethods.Ftp.DeleteFile;
InBlock.gif
InBlock.gif            FtpWebResponse resp 
= request.GetResponse() as FtpWebResponse;
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值