http://www.cnblogs.com/name-lh/archive/2007/04/28/731528.html
前几天,看见园子里面的博友写了一个支持断点续传的FTP类,一时技痒,干脆写了个更完整的clsFtp类。只是我写这个clsFtp不是支持断点续传的目的,而是为了封装FTP几个基本常用的操作接口。
功能
ü 建立FTP链接
ü 支持代理
ü 多种重载的同步上传文件
ü 多种重载的异步上传文件
ü 多种重载的同步下载文件
ü 多种重载的异步下载文件
ü 上传文件的进度百分比
ü 下载文件的进度白分比
ü 有区分的列出目录或者文件的信息(考虑到MS DOS显示格式和UNIX格式)
ü 目录或文件存在的判断
ü 删除文件
ü 重命名文件、目录
ü 在FTP服务器上面拷贝、移动文件(许多人可能在苦苦寻找这个功能)
ü 建立、删除目录
ü 目录切换操作(很新颖哦 J)
公共构造函数
名称 | 说明 |
clsFTP() | 初始化clsFtp类的新实例 |
clsFTP(Uri FtpUri, string strUserName, string strPassword) | 由FTP地址、FTP登录用户信息、FTP登录用户密码初始化clsFtp类的新实例 |
clsFTP(Uri FtpUri, string strUserName, string strPassword, WebProxy objProxy) | 由FTP地址、FTP登录用户信息、FTP登录用户密码、代理服务器对象初始化clsFtp类的新实例 |
公共属性
名称 | 说明 |
Uri | 获取或设置FTP服务器地址 |
DirectoryPath | 获取当前工作目录 |
UserName | 获取或设置FTP登录用户 |
Password | 获取或设置FTP登录密码 |
Proxy | 获取或设置连接FTP服务器的代理服务 |
ErrorMsg | 获取操在返回的错误信息 |
公共方法
名称 | 说明 |
DownloadFile(string RemoteFileName,string LocalPath) | 从FTP服务器下载文件,使用与远程文件同名的文件名来保存文件。 参数说明: RemoteFileName: 远程文件名 LocalPath: 本地路径 |
DownloadFile(string RemoteFileName,string LocalPath, string LocalFileName) | 从FTP服务器下载文件,指定本地路径和本地文件名。 参数说明: LocalPath: 本地路径 LocalFilePath: 保存文件的本地路径,后面带有"\" LocalFileName: 保存本地的文件名 |
DownloadFile(string RemoteFileName) | 从FTP服务器下载文件,返回文件二进制数据。 参数说明: RemoteFileName: 远程文件名 |
DownloadFileAsync(string RemoteFileName, string LocalPath, string LocalFileName) | 从FTP服务器异步下载文件,指定本地路径和本地文件名。 参数说明: RemoteFileName: 远程文件名 LocalPath: 保存文件的本地路径,后面带有"\" LocalFileName: 保存本地的文件名 |
DownloadFileAsync(string RemoteFileName, string LocalFullPath) | 从FTP服务器异步下载文件,指定本地完整路径文件名。 参数说明: RemoteFileName: 远程文件名 LocalFullPath: 本地完整路径文件名 |
UploadFile(string LocalFullPath) | 上传文件到FTP服务器。 参数说明: LocalFullPath: 本地带有完整路径的文件名 |
UploadFile(string LocalFullPath, bool OverWriteRemoteFile) | 上传文件到FTP服务器。 参数说明: LocalFullPath: 本地带有完整路径的文件 OverWriteRemoteFile: 是否覆盖远程服务器上面同名的文件 |
UploadFile(string LocalFullPath, string RemoteFileName) | 上传文件到FTP服务器。 参数说明: LocalFullPath: 本地带有完整路径的文件 RemoteFileName: 要在FTP服务器上面保存文件名 |
UploadFile(string LocalFullPath, string RemoteFileName, bool OverWriteRemoteFile) | 上传文件到FTP服务器。 参数说明: LocalFullPath: 本地带有完整路径的文件名 RemoteFileName: 要在FTP服务器上面保存文件名 OverWriteRemoteFile: 是否覆盖远程服务器上面同名的文件 |
UploadFile(byte[] FileBytes, stringRemoteFileName) | 上传文件到FTP服务器。 参数说明: FileBytes: 上传的二进制数据 RemoteFileName: 要在FTP服务器上面保存文件名 |
UploadFile(byte[] FileBytes, stringRemoteFileName, bool OverWriteRemoteFile) | 上传文件到FTP服务器。 参数说明: FileBytes: 文件二进制内容 RemoteFileName: 要在FTP服务器上面保存文件名 OverWriteRemoteFile: 是否覆盖远程服务器上面同名的文件 |
UploadFileAsync(string LocalFullPath) | 异步上传文件到FTP服务器。 参数说明: LocalFullPath: 本地带有完整路径的文件名 |
UploadFileAsync(string LocalFullPath, bool OverWriteRemoteFile) | 异步上传文件到FTP服务器。 参数说明: LocalFullPath: 本地带有完整路径的文件 OverWriteRemoteFile: 是否覆盖远程服务器上面同名的文件 |
UploadFileAsync(string LocalFullPath, string RemoteFileName) | 异步上传文件到FTP服务器。 参数说明: LocalFullPath: 本地带有完整路径的文件 RemoteFileName: 要在FTP服务器上面保存文件名 |
UploadFileAsync(string LocalFullPath, string RemoteFileName, bool OverWriteRemoteFile) | 异步上传文件到FTP服务器。 参数说明: LocalFullPath: 本地带有完整路径的文件名 RemoteFileName: 要在FTP服务器上面保存文件名 OverWriteRemoteFile: 是否覆盖远程服务器上面同名的文件 |
UploadFileAsync(byte[] FileBytes, string RemoteFileName) | 异步上传文件到FTP服务器。 参数说明: FileBytes: 上传的二进制数据 RemoteFileName: 要在FTP服务器上面保存文件名 |
UploadFileAsync(byte[] FileBytes, string RemoteFileName, bool OverWriteRemoteFile) | 异步上传文件到FTP服务器。 参数说明: FileBytes: 文件二进制内容 RemoteFileName: 要在FTP服务器上面保存文件名 OverWriteRemoteFile: 是否覆盖远程服务器上面同名的文件 |
ListFilesAndDirectories() | 列出FTP服务器上面当前目录的所有文件和目录。 |
ListFiles() | 列出FTP服务器上面当前目录的所有文件。 |
ListDirectories() | 列出FTP服务器上面当前目录的所有的目录。 |
DirectoryExist(string RemoteDirectoryName) | 判断当前目录下指定的子目录是否存在。 参数说明: RemoteDirectoryName: 指定的目录名 |
FileExist(string RemoteFileName) | 判断一个远程文件是否存在服务器当前目录下面。 参数说明: RemoteFileName: 远程文件名 |
DeleteFile(string RemoteFileName) | 从FTP服务器上面删除一个文件。 参数说明: RemoteFileName: 远程文件名 |
ReName(string RemoteFileName, string NewFileName) | 更改一个文件的名称或一个目录的名称。 参数说明: RemoteFileName: 原始文件或目录名称 NewFileName: 新的文件或目录的名称 |
CopyFileToAnotherDirectory(string RemoteFile, string DirectoryName) | 把当前目录下面的一个文件拷贝到服务器上面另外的目录中,注意,拷贝文件之后,当前工作目录还是文件原来所在的目录。 参数说明: RemoteFile: 当前目录下的文件名 DirectoryName: 新目录名称。 说明:如果新目录是当前目录的子目录,则直接指定子目录。如: SubDirectory1/SubDirectory2 ; 如果新目录不是当前目录的子目录,则必须从根目录一级一级的指定。如:./NewDirectory/SubDirectory1/SubDirectory2 |
MoveFileToAnotherDirectory(string RemoteFile, string DirectoryName) | 把当前目录下面的一个文件移动到服务器上面另外的目录中,注意,移动文件之后,当前工作目录还是文件原来所在的目录。 参数说明: RemoteFile: 当前目录下的文件名 DirectoryName: 新目录名称。 说明:如果新目录是当前目录的子目录,则直接指定子目录。如: SubDirectory1/SubDirectory2 ; 如果新目录不是当前目录的子目录,则必须从根目录一级一级的指定。如:./NewDirectory/SubDirectory1/SubDirectory2 |
MakeDirectory(string DirectoryName) | 在FTP服务器上当前工作目录建立一个子目录。 参数说明: DirectoryName: 子目录名称 |
RemoveDirectory(string DirectoryName) | 从当前工作目录中删除一个子目录。 参数说明: DirectoryName: 子目录名称 |
IsValidPathChars(string DirectoryName) | 判断目录名中字符是否合法。 参数说明: DirectoryName: 目录名称 |
IsValidFileChars(string FileName) | 判断文件名中字符是否合法。 参数说明: FileName: 文件名称 |
GotoDirectory(string DirectoryName) | 进入一个目录。 参数说明: DirectoryName: 新目录的名字。 说明:如果新目录是当前目录的子目录,则直接指定子目录。如: SubDirectory1/SubDirectory2 ; 如果新目录不是当前目录的子目录,则必须从根目录一级一级的指定。如:./NewDirectory/SubDirectory1/SubDirectory2 |
EnterOneSubDirectory(string DirectoryName) | 从当前工作目录进入一个子目录。 参数说明: DirectoryName: 子目录名称 |
ComeoutDirectory() | 从当前工作目录往上一级目录。 |
公共事件
名称 | 说明 |
DownloadProgressChanged | 异步下载进度发生改变触发的事件 |
DownloadDataCompleted | 异步下载文件完成之后触发的事件 |
UploadProgressChanged | 异步上传进度发生改变触发的事件 |
UploadFileCompleted | 异步上传文件完成之后触发的事件 |
其他说明
序号 | 说明 |
1 | 支持代理服务器。 可以显式地给Proxy属性赋值;也可以在构造函数中传递Proxy对象。如果代理需要登录用户和密码,则设置Proxy的Credentials属性,例如: Proxy.Credentials = new NetworkCredential(UserName, Password) 如果没有代理,则无需给Proxy属性赋值或者在构造函数中无需传递Proxy参数。 |
2 | 下载文件和上传文件大小最大受Int32.MaxValue限制,所以最大处理只能是2,147,483,647字节。如果您想处理更大的文件,请自己修改代码中对文件打开和读写操作部分的代码使其适应您的要求。 |
3 | 只有在异步上传文件或者异步下载文件的时候,才支持进度百分比触发事件和下载(上传)完成事件。 |
4 | 由于服务器未发送文件大小,因此被动 FTP 文件传输总是将进度百分比显示为零。若要显示进度,可以通过重写 GetWebRequest 虚拟方法来将 FTP 连接更改为活动状态。所以,我们在clsFTP类中另外使用内部类MyWebClient |
5 | 在列出文件和目录的时候,clsFTP类区分出了所获得的响应数据哪些是文件,哪些是目录。同时,考虑到了FTP服务器上面目录样式为MS DOS和UNIX两种表现形式的不同。 |
6 | 支持在FTP服务器上面不同目录之间移动文件和拷贝文件的功能。移动文件的方法比较巧妙,只是拷贝文件所使用的方法不太理想。 |
clsFTP类代码:
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Globalization;
using System.Text.RegularExpressions;
namespace System.Net.Ftp
{
/// <summary>
/// FTP处理操作类
/// 功能:
/// 下载文件
/// 上传文件
/// 上传文件的进度信息
/// 下载文件的进度信息
/// 删除文件
/// 列出文件
/// 列出目录
/// 进入子目录
/// 退出当前目录返回上一层目录
/// 判断远程文件是否存在
/// 判断远程文件是否存在
/// 删除远程文件
/// 建立目录
/// 删除目录
/// 文件(目录)改名
/// </summary>
/// <remarks>
/// 创建人:南疯
/// 创建时间:2007年4月28日
/// </remarks>
文件信息结构
public class clsFTP
{
属性信息
事件
构造析构函数
建立连接
下载文件
异步下载文件
上传文件
异步上传文件
列出目录文件信息
目录或文件存在的判断
删除文件
重命名文件
拷贝、移动文件
建立、删除子目录
文件、目录名称有效性判断
目录切换操作
重载WebClient,支持FTP进度
}
}