- 转自:http://blog.csdn.net/hejialin666/article/details/3522815
-
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Net; 5 using System.Data; 6 using System.IO; 7 using System.ComponentModel; 8 namespace Common 9 { 10 public class FTPClient 11 { 12 private string ftpServerIP = String.Empty; 13 private string ftpUser = String.Empty; 14 private string ftpPassword = String.Empty; 15 private string ftpRootURL = String.Empty; 16 public FTPClient(string url, string userid,string password) 17 { 18 this.ftpServerIP = ftp的IP地址; 19 this.ftpUser = 用户名; 20 this.ftpPassword = 密码; 21 this.ftpRootURL = "ftp://" + url + "/"; 22 } 23 /// <summary> 24 /// 上传 25 /// </summary> 26 /// <param name="localFile">本地文件绝对路径</param> 27 /// <param name="ftpPath">上传到ftp的路径</param> 28 /// <param name="ftpFileName">上传到ftp的文件名</param> 29 public bool fileUpload(FileInfo localFile, string ftpPath, string ftpFileName) 30 { 31 bool success = false; 32 FtpWebRequest ftpWebRequest = null; 33 FileStream localFileStream = null; 34 Stream requestStream = null; 35 try 36 { 37 string uri = ftpRootURL + ftpPath + ftpFileName; 38 ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 39 ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword); 40 ftpWebRequest.UseBinary = true; 41 ftpWebRequest.KeepAlive = false; 42 ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile; 43 ftpWebRequest.ContentLength = localFile.Length; 44 int buffLength = 2048; 45 byte[] buff = new byte[buffLength]; 46 int contentLen; 47 localFileStream = localFile.OpenRead(); 48 requestStream = ftpWebRequest.GetRequestStream(); 49 contentLen = localFileStream.Read(buff, 0, buffLength); 50 while (contentLen != 0) 51 { 52 requestStream.Write(buff, 0, contentLen); 53 contentLen = localFileStream.Read(buff, 0, buffLength); 54 } 55 success = true; 56 } 57 catch (Exception) 58 { 59 success = false; 60 } 61 finally 62 { 63 if (requestStream != null) 64 { 65 requestStream.Close(); 66 } 67 if (localFileStream != null) 68 { 69 localFileStream.Close(); 70 } 71 } 72 return success; 73 } 74 /// <summary> 75 /// 上传文件 76 /// </summary> 77 /// <param name="localPath">本地文件地址(没有文件名)</param> 78 /// <param name="localFileName">本地文件名</param> 79 /// <param name="ftpPath">上传到ftp的路径</param> 80 /// <param name="ftpFileName">上传到ftp的文件名</param> 81 public bool fileUpload(string localPath, string localFileName, string ftpPath, string ftpFileName) 82 { 83 bool success = false; 84 try 85 { 86 FileInfo localFile = new FileInfo(localPath + localFileName); 87 if (localFile.Exists) 88 { 89 success = fileUpload(localFile, ftpPath, ftpFileName); 90 } 91 else 92 { 93 success = false; 94 } 95 } 96 catch (Exception) 97 { 98 success = false; 99 } 100 return success; 101 } 102 /// <summary> 103 /// 下载文件 104 /// </summary> 105 /// <param name="localPath">本地文件地址(没有文件名)</param> 106 /// <param name="localFileName">本地文件名</param> 107 /// <param name="ftpPath">下载的ftp的路径</param> 108 /// <param name="ftpFileName">下载的ftp的文件名</param> 109 public bool fileDownload(string localPath, string localFileName, string ftpPath, string ftpFileName) 110 { 111 bool success = false; 112 FtpWebRequest ftpWebRequest = null; 113 FtpWebResponse ftpWebResponse = null; 114 Stream ftpResponseStream = null; 115 FileStream outputStream = null; 116 try 117 { 118 outputStream = new FileStream(localPath + localFileName, FileMode.Create); 119 string uri = ftpRootURL + ftpPath + ftpFileName; 120 ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 121 ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword); 122 ftpWebRequest.UseBinary = true; 123 ftpWebRequest.Method = WebRequestMethods.Ftp.DownloadFile; 124 ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse(); 125 ftpResponseStream = ftpWebResponse.GetResponseStream(); 126 long contentLength = ftpWebResponse.ContentLength; 127 int bufferSize = 2048; 128 byte[] buffer = new byte[bufferSize]; 129 int readCount; 130 readCount = ftpResponseStream.Read(buffer, 0, bufferSize); 131 while (readCount > 0) 132 { 133 outputStream.Write(buffer, 0, readCount); 134 readCount = ftpResponseStream.Read(buffer, 0, bufferSize); 135 } 136 success = true; 137 } 138 catch (Exception) 139 { 140 success = false; 141 } 142 finally 143 { 144 if (outputStream != null) 145 { 146 outputStream.Close(); 147 } 148 if (ftpResponseStream != null) 149 { 150 ftpResponseStream.Close(); 151 } 152 if (ftpWebResponse != null) 153 { 154 ftpWebResponse.Close(); 155 } 156 } 157 return success; 158 } 159 /// <summary> 160 /// 重命名 161 /// </summary> 162 /// <param name="ftpPath">ftp文件路径</param> 163 /// <param name="currentFilename"></param> 164 /// <param name="newFilename"></param> 165 public bool fileRename(string ftpPath, string currentFileName, string newFileName) 166 { 167 bool success = false; 168 FtpWebRequest ftpWebRequest = null; 169 FtpWebResponse ftpWebResponse = null; 170 Stream ftpResponseStream = null; 171 try 172 { 173 string uri = ftpRootURL + ftpPath + currentFileName; 174 ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 175 ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword); 176 ftpWebRequest.UseBinary = true; 177 ftpWebRequest.Method = WebRequestMethods.Ftp.Rename; 178 ftpWebRequest.RenameTo = newFileName; 179 180 ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse(); 181 ftpResponseStream = ftpWebResponse.GetResponseStream(); 182 183 } 184 catch (Exception) 185 { 186 success = false; 187 } 188 finally 189 { 190 if (ftpResponseStream != null) 191 { 192 ftpResponseStream.Close(); 193 } 194 if (ftpWebResponse != null) 195 { 196 ftpWebResponse.Close(); 197 } 198 } 199 return success; 200 } 201 /// <summary> 202 /// 消除文件 203 /// </summary> 204 /// <param name="filePath"></param> 205 public bool fileDelete(string ftpPath, string ftpName) 206 { 207 bool success = false; 208 FtpWebRequest ftpWebRequest = null; 209 FtpWebResponse ftpWebResponse = null; 210 Stream ftpResponseStream = null; 211 StreamReader streamReader = null; 212 try 213 { 214 string uri = ftpRootURL + ftpPath + ftpName; 215 ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 216 ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword); 217 ftpWebRequest.KeepAlive = false; 218 ftpWebRequest.Method = WebRequestMethods.Ftp.DeleteFile; 219 ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse(); 220 long size = ftpWebResponse.ContentLength; 221 ftpResponseStream = ftpWebResponse.GetResponseStream(); 222 streamReader = new StreamReader(ftpResponseStream); 223 string result = String.Empty; 224 result = streamReader.ReadToEnd(); 225 226 success = true; 227 } 228 catch (Exception) 229 { 230 success = false; 231 } 232 finally 233 { 234 if (streamReader != null) 235 { 236 streamReader.Close(); 237 } 238 if (ftpResponseStream != null) 239 { 240 ftpResponseStream.Close(); 241 } 242 if (ftpWebResponse != null) 243 { 244 ftpWebResponse.Close(); 245 } 246 } 247 return success; 248 } 249 /// <summary> 250 /// 文件存在检查 251 /// </summary> 252 /// <param name="ftpPath"></param> 253 /// <param name="ftpName"></param> 254 /// <returns></returns> 255 public bool fileCheckExist(string ftpPath, string ftpName) 256 { 257 bool success = false; 258 FtpWebRequest ftpWebRequest = null; 259 WebResponse webResponse = null; 260 StreamReader reader = null; 261 try 262 { 263 string url = ftpRootURL + ftpPath; 264 265 ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(url)); 266 ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword); 267 ftpWebRequest.Method = WebRequestMethods.Ftp.ListDirectory; 268 ftpWebRequest.KeepAlive = false; 269 webResponse = ftpWebRequest.GetResponse(); 270 reader = new StreamReader(webResponse.GetResponseStream()); 271 string line = reader.ReadLine(); 272 while (line != null) 273 { 274 if (line == ftpName) 275 { 276 success = true; 277 break; 278 } 279 line = reader.ReadLine(); 280 } 281 } 282 catch (Exception) 283 { 284 success = false; 285 } 286 finally 287 { 288 if (reader != null) 289 { 290 reader.Close(); 291 } 292 if (webResponse != null) 293 { 294 webResponse.Close(); 295 } 296 } 297 return success; 298 } 299 } 300 }