在.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 请求数据。FtpWebRequest和HttpWebRequest一样,都是WebRequest的子类,都是基于.NET Framework 的请求/响应模型。下面的代码示例演示如何从 FTP 服务器上删除文件(代码来于MSDN)。
{
// The serverUri parameter should use the ftp:// scheme.
// It contains the name of the server file that is to be deleted.
// Example: ftp://contoso.com/someFile.txt.
//
if (serverUri.Scheme != Uri.UriSchemeFtp)
{
return false;
}
// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
request.Method = WebRequestMethods.Ftp.DeleteFile;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Console.WriteLine("Delete status: {0}", response.StatusDescription);
response.Close();
return true;
}
从上述代码中我们可以看到,FtpWebRequest和HttpWebRequest的使用方式非常类似。只要将FtpWebRequest的 Method 属性设置为 WebRequestMethods.Ftp 结构中定义的值,就能发送相应的 FTP 命令到服务器,执行相应的操作。
关于ftp的更多信息,这里就不详作介绍,下面是我用FtpWebRequest对常用的操作进行了一点简单的封装,相信读了下列代码后会对FtpWebRequest有更多的了解的。
{
string userName;
string passWord;
byte[] buffer = new byte[1024 * 20];
public FtpClient(string userName, string passWord)
{
this.userName = userName;
this.passWord = passWord;
}
/**//// <summary>
/// 创建ftp请求信息
/// </summary>
/// <param name="url">目标url地址</param>
/// <param name="useBinary">是否使用二进制传输</param>
private FtpWebRequest GetRequest(string url, bool useBinary)
{
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(url);
ftpRequest.Credentials = new NetworkCredential(userName, passWord);
ftpRequest.UseBinary = useBinary;
ftpRequest.KeepAlive = true;
return ftpRequest;
}
private FtpWebRequest GetRequest(string url)
{
return GetRequest(url, false);
}
string GetStreamText(Stream stream)
{
StreamReader reader = new StreamReader(stream, Encoding.Default);
string text = reader.ReadToEnd();
reader.Close();
return text;
}
//将orgStream中的内容拷贝到desStream中
void WriteStream(Stream orgStream, Stream desStream)
{
int num;
while ((num = orgStream.Read(buffer, 0, buffer.Length)) > 0)
{
desStream.Write(buffer, 0, num);
}
orgStream.Close();
desStream.Close();
}
/**//// <summary>
/// 列出ftp目录所包含的文件信息
/// </summary>
/// <param name="remoteDir">远程文件夹</param>
/// <returns>文件详细信息</returns>
public string ListFiles(string remoteDir)
{
FtpWebRequest request = GetRequest(remoteDir, false);
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
return GetStreamText(request.GetResponse().GetResponseStream());
}
/**//// <summary>
/// 下载文件
/// </summary>
/// <param name="localFile">本地文件路径</param>
/// <param name="remoteFile">远程文件路径</param>
/// <param name="useBinary">是否采用二进制方式</param>
public void DownloadFile(string localFile, string remoteFile, bool useBinary)
{
FtpWebRequest request = GetRequest(remoteFile, useBinary);
request.Method = WebRequestMethods.Ftp.DownloadFile;
WriteStream(request.GetResponse().GetResponseStream(), File.Create(localFile));
}
/**//// <summary>
/// 上传文件
/// </summary>
/// <param name="localFile">本地文件路径</param>
/// <param name="remoteFile">远程文件路径</param>
/// <param name="useBinary">是否采用二进制方式</param>
public void UploadFile(string localFile, string remoteFile, bool useBinary)
{
FileInfo fi = new FileInfo(localFile);
FtpWebRequest request = GetRequest(remoteFile, useBinary);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.ContentLength = fi.Length;
WriteStream(fi.OpenRead(),request.GetRequestStream());
request.GetResponse();
}
//删除文件
public void DeleteFile(string remoteFile)
{
FtpWebRequest request = GetRequest(remoteFile);
request.Method = WebRequestMethods.Ftp.DeleteFile;
FtpWebResponse resp = request.GetResponse() as FtpWebResponse;
}
}
在.net 2.0 中使用ftp相关推荐
- NET 2.0中WinForm自定义的程序配置存放到哪里去了
.NET 2.0中,WinForm应用程序的配置已经非常方便.默认情况下,我们可以利用Properties文件夹里默认的Settings.setting文件进行Application和User两个层级 ...
- ftp linux 开启验证_在linux中开启ftp服务
1,首先,安装vsftpd组件 直接yum -y install vsftpd就行了 2,添加ftp用户 useradd ftpuser 3,给ftp用户添加密码 passwd ftpuser之需要输 ...
- linux的ftp停不下来了,FTP上传时经常中断,怎么办? 在Linux终端中使用ftp时总是出现connection refuse......
导航:网站首页 > FTP上传时经常中断,怎么办? 在Linux终端中使用ftp时总是出现connection refuse... FTP上传时经常中断,怎么办? 在Linux终端中使用ftp时 ...
- JAVA 实现FTP功能_在Java程序中实现FTP功能
本文来演示在JAVA编程中实现FTP功能的三个重要部分内容的源程序: FtpList部分是用来显示FTP上的文件; GetButton部分为从FTP下传一个文件; PutButton部分为向FTP服务 ...
- ftp文件传输 vscode_在vscode中配置ftp
在vscode中配置ftp 安装ftp插件 在vscode扩展中搜索 FTP-Sync 并安装. 启用插件 在vscode 项目中按下F1按钮启动命令行工具,输入ftp ,选择 FTP-Sync:in ...
- VB6.0中创建和使用文本资源文件
不少网友问及如何在VB中建立和使用文本资源文件.我想这也是很多VB初学者迫切想掌握的技巧.为此,将回答网友的信件整理了一下,形成此文,希望对大家有些帮助. 一.文本资源文件的建立 第一步:启动资源编辑 ...
- windows 命令行中 「ftp」「sftp」命令的使用
■前言1 连接IBM的 mainframe(大机) ■前言2 SSH登陆实现方式介绍(为什么SSH是安全的) A向B发送连接请求 B收到请求后,将自己的公钥发给A A收到公钥后,用公钥加密B的登陆密码 ...
- Win7下如何在windows资源管理器中打开FTP
大家在使用网络的过程中,往往会登陆一些FTP站点,通过这些站点来下载一些软件,以前在IE6中,打开FTP后,就会直接看见文件夹,就如同打开本地硬盘一样,这样很直观也很容易操作.但是在IE8(家庭网络) ...
- Linux中的ftp命令怎么写,linux中的ftp命令用法
Linux系统中的ftp命令功能强大,那么它的具体用法是怎样呢?下面由学习啦小编为大家整理了linux中的ftp命令用法相关知识,希望对大家有帮助! linux中的ftp命令用法 1. 连接ftp服务 ...
最新文章
- Could not initialize class org.jetbrains.kotlin.gradle.internal.KotlinSourceSetProviderImplKt
- 用开关控制蜂鸣器_室内照明控制系统的调试与检修
- 安装 | Anaconda3下载链接
- edit plus 中文插件_iMindMap手绘思维导图软件中文版
- intellij运行flink的wordcount实验-Java版本
- Linux shell命令最常用的快捷键
- Magento: 友好显示库存 User friendly product availability message in Magento
- Url几个常用的函数
- stl2xml.py 代码实现了stl格式转化为xml格式
- 阿里面试回答的认真总结
- 批量获取ip运营商_关于获取运营商的IP地址
- 机器学习7-主成分分析
- 取石子游戏,威佐夫博弈的推理
- ToC和ToB有啥区别
- matlab增加一行ones,MATLAB repmat()、ones()、zeros()、prod()函数的使用
- 大龄程序员找工作,为什么这么难?能力与年龄不匹配
- [Android系统原理及开发要点详解
- Wifi测速上下行不一致
- Vue项目之上传图片
- ACL最近三年论文整理(word embedding专题)