标签:
/// <summary>
/// 移除FTP上的指定文件
/// </summary>
/// <param name="filename">要移除的文件名称</param>
public void RemoveFile(string filename)
{
Connect();
SendCommand("DELE " + filename);
ReadResponse();
if (response != 250)
{
errormessage += responseStr;
}
}
/// <summary>
/// 重命名FTP上的文件
/// </summary>
/// <param name="oldfilename">原文件名</param>
/// <param name="newfilename">新文件名</param>
public void RenameFile(string oldfilename, string newfilename)
{
Connect();
SendCommand("RNFR " + oldfilename);
ReadResponse();
if (response != 350)
{
errormessage += responseStr;
}
else
{
SendCommand("RNTO " + newfilename);
ReadResponse();
if (response != 250)
{
errormessage += responseStr;
}
}
}
/// <summary>
/// 获得指定文件的大小(如果FTP支持)
/// </summary>
/// <param name="filename">指定的文件</param>
/// <returns>返回指定文件的大小</returns>
public long GetFileSize(string filename)
{
Connect();
SendCommand("SIZE " + filename);
ReadResponse();
if (response != 213)
{
errormessage += responseStr;
}
return Int64.Parse(responseStr.Substring(4));
}
/// <summary>
/// 上传指定的文件
/// </summary>
/// <param name="filename">要上传的文件</param>
public bool OpenUpload(string filename)
{
return OpenUpload(filename, filename, false);
}
/// <summary>
/// 上传指定的文件
/// </summary>
/// <param name="filename">本地文件名</param>
/// <param name="remotefilename">远程要覆盖的文件名</param>
public bool OpenUpload(string filename, string remotefilename)
{
return OpenUpload(filename, remotefilename, false);
}
/// <summary>
/// 上传指定的文件
/// </summary>
/// <param name="filename">本地文件名</param>
/// <param name="resume">如果存在,则尝试恢复</param>
public bool OpenUpload(string filename, bool resume)
{
return OpenUpload(filename, filename, resume);
}
/// <summary>
/// 上传指定的文件
/// </summary>
/// <param name="filename">本地文件名</param>
/// <param name="remote_filename">远程要覆盖的文件名</param>
/// <param name="resume">如果存在,则尝试恢复</param>
public bool OpenUpload(string filename, string remote_filename, bool resume)
{
Connect();
SetBinaryMode(true);
OpenDataSocket();
bytes_total = 0;
try
{
file = new FileStream(filename, FileMode.Open);
}
catch (Exception ex)
{
file = null;
errormessage += ex.Message;
return false;
}
file_size = file.Length;
if (resume)
{
long size = GetFileSize(remote_filename);
SendCommand("REST " + size);
ReadResponse();
if (response == 350)
file.Seek(size, SeekOrigin.Begin);
}
SendCommand("STOR " + remote_filename);
ReadResponse();
switch (response)
{
case 125:
case 150:
break;
default:
file.Close();
file = null;
errormessage += responseStr;
return false;
}
ConnectDataSocket();
return true;
}
/// <summary>
/// 下载指定文件
/// </summary>
/// <param name="filename">远程文件名称</param>
public void OpenDownload(string filename)
{
OpenDownload(filename, filename, false);
}
/// <summary>
/// 下载并恢复指定文件
/// </summary>
/// <param name="filename">远程文件名称</param>
/// <param name="resume">如文件存在,则尝试恢复</param>
public void OpenDownload(string filename, bool resume)
{
OpenDownload(filename, filename, resume);
}
/// <summary>
/// 下载指定文件
/// </summary>
/// <param name="filename">远程文件名称</param>
/// <param name="localfilename">本地文件名</param>
public void OpenDownload(string remote_filename, string localfilename)
{
OpenDownload(remote_filename, localfilename, false);
}
/// <summary>
/// 打开并下载文件
/// </summary>
/// <param name="remote_filename">远程文件名称</param>
/// <param name="local_filename">本地文件名</param>
/// <param name="resume">如果文件存在则恢复</param>
public void OpenDownload(string remote_filename, string local_filename, bool resume)
{
Connect();
SetBinaryMode(true);
bytes_total = 0;
try
{
file_size = GetFileSize(remote_filename);
}
catch
{
file_size = 0;
}
if (resume && File.Exists(local_filename))
{
try
{
file = new FileStream(local_filename, FileMode.Open);
}
catch (Exception ex)
{
file = null;
throw new Exception(ex.Message);
}
SendCommand("REST " + file.Length);
ReadResponse();
if (response != 350)
throw new Exception(responseStr);
file.Seek(file.Length, SeekOrigin.Begin);
bytes_total = file.Length;
}
else
{
try
{
file = new FileStream(local_filename, FileMode.Create);
}
catch (Exception ex)
{
file = null;
throw new Exception(ex.Message);
}
}
OpenDataSocket();
SendCommand("RETR " + remote_filename);
ReadResponse();
switch (response)
{
case 125:
case 150:
break;
default:
file.Close();
file = null;
errormessage += responseStr;
return;
}
ConnectDataSocket();
return;
}
/// <summary>
/// 上传文件(循环调用直到上传完毕)
/// </summary>
/// <returns>发送的字节数</returns>
public long DoUpload()
{
Byte[] bytes = new Byte[512];
long bytes_got;
try
{
bytes_got = file.Read(bytes, 0, bytes.Length);
bytes_total += bytes_got;
data_sock.Send(bytes, (int)bytes_got, 0);
if (bytes_got <= 0)
{
//上传完毕或有错误发生
file.Close();
file = null;
CloseDataSocket();
ReadResponse();
switch (response)
{
case 226:
case 250:
break;
default: //当上传中断时
{
errormessage += responseStr;
return -1;
}
}
SetBinaryMode(false);
}
}
catch (Exception ex)
{
file.Close();
file = null;
CloseDataSocket();
ReadResponse();
SetBinaryMode(false);
//throw ex;
//当上传中断时
errormessage += ex.Message;
return -1;
}
return bytes_got;
}
/// <summary>
/// 下载文件(循环调用直到下载完毕)
/// </summary>
/// <returns>接收到的字节点</returns>
public long DoDownload()
{
Byte[] bytes = new Byte[512];
long bytes_got;
try
{
bytes_got = data_sock.Receive(bytes, bytes.Length, 0);
if (bytes_got <= 0)
{
//下载完毕或有错误发生
CloseDataSocket();
file.Close();
file = null;
ReadResponse();
switch (response)
{
case 226:
case 250:
break;
default:
{
errormessage += responseStr;
return -1;
}
}
SetBinaryMode(false);
return bytes_got;
}
file.Write(bytes, 0, (int)bytes_got);
bytes_total += bytes_got;
}
catch (Exception ex)
{
CloseDataSocket();
file.Close();
file = null;
ReadResponse();
SetBinaryMode(false);
//throw ex;
//当下载中断时
errormessage += ex.Message;
return -1;
}
return bytes_got;
}
#endregion
}
}
简单使用示例:
程序代码
FTP ftp = new FTP("127.0.0.1", "abc", "123456");
//建立文件夹
ftp.MakeDir("com");
ftp.ChangeDir("com");
ftp.MakeDir("mzwu");
ftp.ChangeDir("mzwu");
//文件夹列表
ArrayList list = ftp.ListDirectories();
for (int i = 0; i < list.Count; i++)
{
Response.Write(list[i].ToString() + "<br/>");
}
//删除文件夹(不能直接删除非空文件夹)
ftp.RemoveDir("com\\mzwu");
//上传文件
ftp.Connect();
ftp.OpenUpload(@"F:\mzwucom.jpg", Path.GetFileName(@"F:\mzwucom.jpg"));
while (ftp.DoUpload() > 0)
{
int perc = (int)(((ftp.BytesTotal) * 100) / ftp.FileSize);
Response.Write(perc.ToString() + "%<br/>");
Response.Flush();
}
ftp.Disconnect();
//下载文件
ftp.Connect();
ftp.OpenDownload("mzwucom.jpg", @"E:\mzwucom.jpg");
while (ftp.DoDownload() > 0)
{
int perc = (int)(((ftp.BytesTotal) * 100) / ftp.FileSize);
Response.Write(perc.ToString() + "%<br/>");
Response.Flush();
}
ftp.Disconnect();
//文件列表
ArrayList list = ftp.ListFiles();
for (int i = 0; i < list.Count; i++)
{
Response.Write(list[i].ToString() + "<br/>");
}
//文件重命名
ftp.RenameFile("mzwucom.jpg", "test.jpg");
//删除文件
ftp.RemoveFile("test.jpg");
//显示错误信息
Response.Write(ftp.errormessage);
标签:
原文地址:http://www.cnblogs.com/tonglei/p/4427850.html