1、
using System;
using System.Collections.Generic;
using System.Net;
using System.IO;
namespace FTP操作
{
///
2、/ 默认不使用SSL,使用二进制传输方式,使用被动模式 /// /// /// 主机名称 /// 用户名 /// 密码 public FtpClient(string host, string userId, string password) : thi
3、s(host, userId, password, 21, null, false, true, true)
{
}
///
4、aram name="port">端口 /// 允许Ssl /// 代理 /// 允许二进制 /// 允许被动模式 public FtpClient(string host, string userId, string password, in
5、t port, IWebProxy proxy, bool enableSsl, bool useBinary, bool usePassive) { this.userId = userId; this.password = password; if (host.ToLower().StartsWith("ftp://")) { this.host = host; } else
6、 { this.host = "ftp://" + host; } this.port = port; this.proxy = proxy; this.enableSsl = enableSsl; this.useBinary = useBinary; this.usePassive = usePassive; } #endregion
7、 #region 主机
private string host = string.Empty;
///
8、 #region 登录用户名
private string userId = string.Empty;
///
9、on 密码
private string password = string.Empty;
///
10、
IWebProxy proxy = null;
///
11、 }
}
#endregion
#region 端口
private int port = 21;
///
12、 this.port = value;
}
}
#endregion
#region 设置是否允许Ssl
private bool enableSsl = false;
///
13、 return enableSsl;
}
}
#endregion
#region 使用被动模式
private bool usePassive = true;
///
14、 return usePassive;
}
set
{
this.usePassive = value;
}
}
#endregion
#region 二进制方式
private bool useBinary = true;
///
15、c bool UseBinary { get { return useBinary; } set { this.useBinary = value; } } #endregion #region 远端路径 private string remotePath = "/";
16、 ///
17、 { string result = "/"; if (!string.IsNullOrEmpty(value) && value != "/") { result = "/" + value.TrimStart('/').TrimEnd('/') + "/"; } this.remotePath = result; }
18、}
#endregion
#region 创建一个FTP连接
///
19、g url, string method) { //建立连接 FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url); request.Credentials = new NetworkCredential(this.userId, this.password); request.Proxy = this.proxy; request.KeepAlive = false;//命令执
20、行完毕之后关闭连接
request.UseBinary = useBinary;
request.UsePassive = usePassive;
request.EnableSsl = enableSsl;
request.Method = method;
return request;
}
#endregion
#region 上传一个文件到远端路径下
///
21、 /// 把文件上传到FTP服务器的RemotePath下 /// /// 本地文件信息 /// 要保存到FTP文件服务器上的名称 public bool Upload(FileInfo localFile, string remoteFileName) { bool result = false;
22、 if (localFile.Exists) { string url = Host.TrimEnd('/') + RemotePath + remoteFileName; FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.UploadFile); //上传数据 using (Stream rs = request.GetRequestSt
23、ream()) using (FileStream fs = localFile.OpenRead()) { byte[] buffer = new byte[4096];//4K int count = fs.Read(buffer, 0, buffer.Length); while (count > 0) {
24、 rs.Write(buffer, 0, count); count = fs.Read(buffer, 0, buffer.Length); } fs.Close(); result = true; } return result; } throw new Exception(string.Forma
25、t("本地文件不存在,文件路径:{0}", localFile.FullName));
}
#endregion
#region 从FTP服务器上下载文件
///
26、的文件名称
/// 本地文件名称
///
27、OrCreate)) //创建或打开本地文件 { //建立连接 string url = Host.TrimEnd('/') + RemotePath + serverName; FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.DownloadFile); request.ContentOffset = fs.Length;
28、 using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) { fs.Position = fs.Length; byte[] buffer = new byte[4096];//4K int count = response.GetResponseStream().Read(buffer, 0, buffer.Length);
29、 while (count > 0) { fs.Write(buffer, 0, count); count = response.GetResponseStream().Read(buffer, 0, buffer.Length); } response.GetResponseStream().Close(); }
30、
result = true;
}
return result;
}
#endregion
#region 重命名FTP服务器上的文件
///
31、
///
32、eateRequest(url, WebRequestMethods.Ftp.Rename); request.RenameTo = newFileName; using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) { result = true; } return result; } #endregion
33、
#region 从当前目录下获取文件列表
///
34、End('/') + RemotePath; FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.ListDirectory); using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) { StreamReader reader = new StreamReader(response.GetResponseStream(
35、), System.Text.Encoding.Default);//中文文件名 string line = reader.ReadLine(); while (line != null) { result.Add(line); line = reader.ReadLine(); } } return result;
36、 }
#endregion
#region 从FTP服务器上获取文件和文件夹列表
///
37、 string url = Host.TrimEnd('/') + RemotePath; FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.ListDirectoryDetails); using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) { StreamReader reader = new S
38、treamReader(response.GetResponseStream(), System.Text.Encoding.Default);//中文文件名 string line = reader.ReadLine(); while (line != null) { result.Add(line); line = reader.ReadLine(); }
39、 }
return result;
}
#endregion
#region 从FTP服务器上删除文件
///
40、tring fileName) { bool result = false; //建立连接 string url = Host.TrimEnd('/') + RemotePath + fileName; FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.DeleteFile); using (FtpWebResponse response = (FtpWebRespon
41、se)request.GetResponse())
{
result = true;
}
return result;
}
#endregion
#region 在FTP服务器上创建目录
///
42、>
///
43、ethods.Ftp.MakeDirectory);
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
{
result = true;
}
return result;
}
#endregion
#region 从FTP服务器上删除目录
///
44、 删除文件夹
///
/// 文件夹名称
///
45、h + dirName; FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.RemoveDirectory); using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) { result = true; } return result; }
46、 #endregion
#region 从FTP服务器上获取文件大小
///
47、建立连接 string url = Host.TrimEnd('/') + RemotePath + fileName; FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.GetFileSize); using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) { result = response
48、ContentLength;
}
return result;
}
#endregion
#region 给FTP服务器上的文件追加内容
///
49、器上的文件
///
50、 {
return Append(fs, remoteFileName);
}
}
throw new Exception(string.Format("本地文件不存在,文件路径:{0}", localFile.FullName));
}
///