using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net; using System.Windows.Forms;
namespace RecoverData { public class FTPClient { private string ftpServerIP = String.Empty; private string ftpUser = String.Empty; private string ftpPassword = String.Empty; private string ftpRootURL = String.Empty; private string ftpServerPort = string.Empty; private ProgressBar pbCurrent; private ProgressBar pbTotal;
public FTPClient(string url, string userid, string password, string serverIp, string serverPort) { this.ftpServerIP = serverIp; this.ftpServerPort = serverPort; this.ftpUser = userid; this.ftpPassword = password; this.ftpRootURL = url;
//this.pbCurrent = srcPbCurrent; //this.pbTotal = srcPbTotal; }
/// <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 { if (localPath != "") { System.IO.DirectoryInfo di = new DirectoryInfo(localPath); di.Create(); } outputStream = new FileStream(localPath + localFileName, FileMode.Create);
string uri = ftpRootURL + ftpPath+ftpFileName;//20110310fqs
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; pbCurrent.Value = 0; pbCurrent.Maximum = (int)(GetFileSize(ftpPath + ftpFileName) / bufferSize) + 1; readCount = ftpResponseStream.Read(buffer, 0, bufferSize); while (readCount > 0) { outputStream.Write(buffer, 0, readCount); readCount = ftpResponseStream.Read(buffer, 0, bufferSize); if (pbCurrent.Value != pbCurrent.Maximum) { pbCurrent.Value += 1; } } pbTotal.Value += 1;
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; }
/// <summary> /// 获取指定文件大小 /// </summary> /// <param name="filename"></param> /// <returns></returns> public long GetFileSize(string filename) { FtpWebRequest reqFTP; long fileSize = 0; try { reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpRootURL + filename)); reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
reqFTP.UseBinary = true; reqFTP.Credentials = new NetworkCredential(ftpUser, ftpPassword); FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Stream ftpStream = response.GetResponseStream(); fileSize = response.ContentLength;
ftpStream.Close(); response.Close(); } catch (Exception ex) { //Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFileSize Error --> " + ex.Message); } return fileSize; }
} }
|
请发表评论