using System;
using System.Collections.Generic; using System.Text; using System.Net; using System.Data; using System.IO; using System.ComponentModel;namespace Common
{ public class FTPClient { private string ftpServerIP = String.Empty; private string ftpUser = String.Empty; private string ftpPassword = String.Empty; private string ftpRootURL = String.Empty;public FTPClient(string url, string userid,string password)
{ this.ftpServerIP = ftp的IP地址; this.ftpUser = 用户名; this.ftpPassword = 密码; this.ftpRootURL = "ftp://" + url + "/"; }/// <summary>
/// 上传 /// </summary> /// <param name="localFile">本地文件绝对路径</param> /// <param name="ftpPath">上传到ftp的路径</param> /// <param name="ftpFileName">上传到ftp的文件名</param> public bool fileUpload(FileInfo localFile, string ftpPath, string ftpFileName) { bool success = false; FtpWebRequest ftpWebRequest = null;FileStream localFileStream = null;
Stream requestStream = null;try
{ string uri = ftpRootURL + ftpPath + ftpFileName;ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword); ftpWebRequest.UseBinary = true;ftpWebRequest.KeepAlive = false;
ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile; ftpWebRequest.ContentLength = localFile.Length;int buffLength = 2048;
byte[] buff = new byte[buffLength]; int contentLen;localFileStream = localFile.OpenRead();
requestStream = ftpWebRequest.GetRequestStream();contentLen = localFileStream.Read(buff, 0, buffLength);
while (contentLen != 0) { requestStream.Write(buff, 0, contentLen); contentLen = localFileStream.Read(buff, 0, buffLength); }success = true;
} catch (Exception) { success = false; } finally { if (requestStream != null) { requestStream.Close(); }if (localFileStream != null)
{ localFileStream.Close(); } }return success;
}/// <summary>
/// 上传文件 /// </summary> /// <param name="localPath">本地文件地址(没有文件名)</param> /// <param name="localFileName">本地文件名</param> /// <param name="ftpPath">上传到ftp的路径</param> /// <param name="ftpFileName">上传到ftp的文件名</param> public bool fileUpload(string localPath, string localFileName, string ftpPath, string ftpFileName) { bool success = false;try
{ FileInfo localFile = new FileInfo(localPath + localFileName); if (localFile.Exists) { success = fileUpload(localFile, ftpPath, ftpFileName); } else { success = false; } } catch (Exception) { success = false; }return success;
}/// <summary>
/// 下载文件 /// </summary> /// <param name="localPath">本地文件地址(没有文件名)</param> /// <param name="localFileName">本地文件名</param> /// <param name="ftpPath">下载的ftp的路径</param> /// <param name="ftpFileName">下载的ftp的文件名</param> public bool fileDownload(string localPath, string localFileName, string ftpPath, string ftpFileName) { bool success = false; FtpWebRequest ftpWebRequest = null; FtpWebResponse ftpWebResponse = null; Stream ftpResponseStream = null; FileStream outputStream = null;try
{ outputStream = new FileStream(localPath + localFileName, FileMode.Create);string uri = ftpRootURL + ftpPath + ftpFileName;
ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword); ftpWebRequest.UseBinary = true; ftpWebRequest.Method = WebRequestMethods.Ftp.DownloadFile;ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse();
ftpResponseStream = ftpWebResponse.GetResponseStream();
long contentLength = ftpWebResponse.ContentLength;int bufferSize = 2048;
byte[] buffer = new byte[bufferSize]; int readCount;readCount = ftpResponseStream.Read(buffer, 0, bufferSize);
while (readCount > 0) { outputStream.Write(buffer, 0, readCount); readCount = ftpResponseStream.Read(buffer, 0, bufferSize); } success = true; } catch (Exception) { success = false; } finally { if (outputStream != null) { outputStream.Close(); }if (ftpResponseStream != null)
{ ftpResponseStream.Close(); }if (ftpWebResponse != null)
{ ftpWebResponse.Close(); } }return success;
} /// <summary> /// 重命名 /// </summary> /// <param name="ftpPath">ftp文件路径</param> /// <param name="currentFilename"></param> /// <param name="newFilename"></param> public bool fileRename(string ftpPath, string currentFileName, string newFileName) { bool success = false; FtpWebRequest ftpWebRequest = null; FtpWebResponse ftpWebResponse = null; Stream ftpResponseStream = null;try
{ string uri = ftpRootURL + ftpPath + currentFileName;ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword); ftpWebRequest.UseBinary = true; ftpWebRequest.Method = WebRequestMethods.Ftp.Rename; ftpWebRequest.RenameTo = newFileName; ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse(); ftpResponseStream = ftpWebResponse.GetResponseStream();} catch (Exception) { success = false; } finally { if (ftpResponseStream != null) { ftpResponseStream.Close(); }
if (ftpWebResponse != null)
{ ftpWebResponse.Close(); } }return success;
} /// <summary> /// 消除文件 /// </summary> /// <param name="filePath"></param> public bool fileDelete(string ftpPath, string ftpName) { bool success = false; FtpWebRequest ftpWebRequest = null; FtpWebResponse ftpWebResponse = null; Stream ftpResponseStream = null; StreamReader streamReader = null;try
{ string uri = ftpRootURL + ftpPath + ftpName;ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword); ftpWebRequest.KeepAlive = false; ftpWebRequest.Method = WebRequestMethods.Ftp.DeleteFile;ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse();
long size = ftpWebResponse.ContentLength;ftpResponseStream = ftpWebResponse.GetResponseStream();
streamReader = new StreamReader(ftpResponseStream);string result = String.Empty;
result = streamReader.ReadToEnd();
success = true;
} catch (Exception) { success = false; } finally { if (streamReader != null) { streamReader.Close(); }if (ftpResponseStream != null)
{ ftpResponseStream.Close(); }if (ftpWebResponse != null)
{ ftpWebResponse.Close(); } }return success;
}/// <summary>
/// 文件存在检查 /// </summary> /// <param name="ftpPath"></param> /// <param name="ftpName"></param> /// <returns></returns> public bool fileCheckExist(string ftpPath, string ftpName) { bool success = false; FtpWebRequest ftpWebRequest = null; WebResponse webResponse = null; StreamReader reader = null;try
{ string url = ftpRootURL + ftpPath; ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(url)); ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword); ftpWebRequest.Method = WebRequestMethods.Ftp.ListDirectory; ftpWebRequest.KeepAlive = false; webResponse = ftpWebRequest.GetResponse(); reader = new StreamReader(webResponse.GetResponseStream()); string line = reader.ReadLine(); while (line != null) { if (line == ftpName) { success = true; break; } line = reader.ReadLine(); } } catch (Exception) { success = false; } finally { if (reader != null) { reader.Close(); }if (webResponse != null)
{ webResponse.Close(); } } return success; } } }本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/archive/2009/11/11/1600825.html,如需转载请自行联系原作者