日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于ftp的功能类——下载,上传,断点,连接

發布時間:2024/9/5 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于ftp的功能类——下载,上传,断点,连接 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看到園子里有幾篇關于c#連接ftp的文章,剛好最近剛剛完成對于這個的書寫,就發出來給大家分享分享下。不會排版,第一次發,就直接貼代碼了

View Code 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Configuration; 5 using System.Net; 6 using System.IO; 7 8 namespace MirroringDownClass 9 { 10 public class EasyononFtp 11 { 12 public delegate void delegt(string s); 13 public static event delegt onprogressBar; 14 #region 成員 15 16 17 private static string ftpServer ; //ftp服務器地址 18 private static string user; //用戶名 19 private static string pwd; //密碼 20 #endregion 21 22 FtpWebRequest reqFTP; 23 FtpWebResponse ftpResponse; 24 #region 構造函數 25 26 public EasyononFtp() 27 { 28 } 29 public EasyononFtp(string ftpUri, string username, string password) 30 { 31 ftpServer = ftpUri; 32 user = username; 33 pwd = password; 34 } 35 36 #endregion 37 #region FTP連接 38 39 /// <summary> 40 /// Ftp的連接 41 /// </summary> 42 /// <param name="url">ftp的地址</param> 43 /// <returns>bool</returns> 44 public bool ftpconn() 45 { 46 try 47 { 48 reqFTP = getFTPwbRequest(ftpServer, WebRequestMethods.Ftp.ListDirectoryDetails); 49 ftpResponse = (FtpWebResponse)reqFTP.GetResponse(); 50 return true; 51 } 52 catch (Exception ex) 53 { 54 Common.debugPrint(ex.Message.ToString()); 55 } 56 finally 57 { 58 if (ftpResponse != null) 59 { 60 ftpResponse.Close(); 61 } 62 } 63 return false; 64 } 65 #endregion 66 #region 下載FTP文件函數 67 /// <summary> 68 /// 下載 69 /// </summary> 70 /// <param name="desfilePath">本地文件目錄</param> 71 /// <param name="ftpfilePath">FTP服務器文件目錄</param> 72 /// <param name="fileName">帶相對路徑的文件名</param> 73 /// <returns></returns> 74 public bool ftpGetFile(string desfilePath, string ftpfilePath, string fileName) 75 { 76 string Relative_path = fileName.Replace("\\", "/"); 77 string filenamepath = ftpfilePath + "/" + Relative_path; 78 try 79 { 80 if (ftpconn()) 81 { 82 Common.debugPrint(filenamepath + "下載中"); 83 reqFTP = getFTPwbRequest(filenamepath, WebRequestMethods.Ftp.DownloadFile); 84 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 85 Stream ftpStream = response.GetResponseStream();//FTP數據流 86 if (outputStream(desfilePath + "\\" + fileName, ftpStream))//字符流處理方法 87 { 88 ftpStream.Close(); 89 response.Close(); 90 Common.debugPrint(filenamepath + "下載完成!!!"); 91 return true; 92 } 93 else 94 return false; 95 } 96 else 97 { 98 Common.debugPrint("ftpconn()連接失敗"); 99 return false; 100 } 101 } 102 catch (Exception ex) 103 { 104 Common.debugPrint(ex.Message.ToString() + "查看ftpGetFile函數"); 105 return false; 106 } 107 } 108 #endregion 109 #region 重寫FTP下載函數 110 /// <summary> 111 /// 重寫下載方法 112 /// </summary> 113 /// <param name="localFile">本地文件全路徑</param> 114 /// <param name="ftpFile">ftp服務器文件全路徑</param> 115 /// <returns></returns> 116 public bool ftpGetFile(string localFile, string ftpFile) 117 { 118 try 119 { 120 if (ftpconn()) 121 { 122 reqFTP = getFTPwbRequest(ftpFile, WebRequestMethods.Ftp.DownloadFile); 123 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 124 Stream ftpStream = response.GetResponseStream(); 125 if (outputStream(localFile, ftpStream))//字符流處理方法 126 { 127 ftpStream.Close(); 128 response.Close(); 129 return true; 130 } 131 else 132 { 133 ftpStream.Close(); 134 response.Close(); 135 return false; 136 } 137 } 138 else 139 { 140 Common.debugPrint("ftpconn()連接失敗"); 141 return false; 142 } 143 144 } 145 catch (Exception ex) 146 { 147 Common.debugPrint(ex.Message.ToString()); 148 return false; 149 } 150 } 151 #endregion 152 #region 斷點續傳 153 154 155 /// <summary> 156 /// 斷點續傳(下載) 157 /// </summary> 158 /// <param name="localFile">本地文件路徑</param> 159 /// <param name="ftpFile">FTP文件路徑</param> 160 /// <returns>bool</returns> 161 public bool ftpGetBrokenFile(string localFile, string ftpFile) 162 { 163 try 164 { 165 if (File.Exists(localFile)) 166 { 167 FileInfo fileinfo = new FileInfo(localFile); 168 long leng = fileinfo.Length; 169 if (ftpconn()) 170 { 171 if (leng < GetftpFilesLength(ftpFile) && leng < 1024 * 10000) 172 { 173 File.Delete(localFile);//刪除重傳 174 Common.debugPrint(localFile + "刪除重傳"); 175 return ftpGetFile(localFile, ftpFile);//調用ftpGetFile 176 } 177 else// 斷點續傳 178 { 179 reqFTP = getFTPwbRequest(ftpFile, WebRequestMethods.Ftp.DownloadFile); 180 reqFTP.ContentOffset = leng; 181 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 182 Stream ftpStream = response.GetResponseStream(); 183 if (outputStream(localFile, ftpStream))//字符流處理方法 184 { 185 ftpStream.Close(); 186 response.Close(); 187 Common.debugPrint(localFile + "斷點續傳完成"); 188 return true; 189 } 190 else 191 { 192 Common.debugPrint(localFile + "斷點續傳失敗"); 193 return false; 194 } 195 } 196 } 197 else 198 { 199 Common.debugPrint("ftpconn()連接失敗"); 200 return false; 201 } 202 } 203 else 204 { 205 return ftpGetFile(localFile, ftpFile);//調用ftpGetFile 206 } 207 } 208 catch (Exception ex) 209 { 210 Common.debugPrint(ex.Message.ToString()+"EasyonFtp類"); 211 return false; 212 } 213 } 214 #endregion 215 #region FTP上傳 216 /// <summary> 217 /// FTP上傳方法 218 /// </summary> 219 /// <param name="localFile">本地文件全路徑</param> 220 /// <param name="ftpFile">上傳到ftp服務器的指定路徑</param> 221 /// <param name="Breakpoint">斷點處</param> 222 /// <returns></returns> 223 public bool ftpUpload(string localFile, string ftpFile, long Breakpoint) 224 { 225 if (Breakpoint > 0) 226 { 227 reqFTP = getFTPwbRequest(ftpFile, WebRequestMethods.Ftp.AppendFile); 228 } 229 else 230 { 231 reqFTP = getFTPwbRequest(ftpFile, WebRequestMethods.Ftp.UploadFile); 232 } 233 FileInfo fileinfo = new FileInfo(localFile); 234 Stream strm = reqFTP.GetRequestStream(); 235 try 236 { 237 // 上傳文件時通知服務器文件的大小 238 reqFTP.ContentLength = fileinfo.Length; 239 //這里判斷是否是斷點續傳 240 241 if (inputStream(localFile, strm, Breakpoint)) 242 { 243 return true; 244 } 245 else 246 { 247 Common.debugPrint("outputStream處理異常"); 248 return false; 249 } 250 } 251 catch (Exception ex) 252 { 253 Common.debugPrint(ex.Message); 254 } 255 finally 256 { 257 strm.Close(); 258 } 259 return false; 260 } 261 262 /// <summary> 263 /// 創建文件夾 (1J目錄) 264 /// </summary> 265 /// <param name="ftpFile"></param> 266 public bool MaikDir(string ftpFile) 267 { 268 FtpWebResponse response = null; 269 try 270 { 271 string uri = ftpFile; 272 //Connect(uri);//連接 273 reqFTP = getFTPwbRequest(ftpFile, WebRequestMethods.Ftp.MakeDirectory); 274 // reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory; 275 response = (FtpWebResponse)reqFTP.GetResponse(); 276 } 277 catch (Exception ex) 278 { 279 return false; 280 // MessageBox.Show(ex.Message); 281 } 282 finally 283 { 284 if (response != null) 285 { 286 response.Close(); 287 } 288 } 289 return true; 290 291 } 292 #endregion 293 #region 獲取ftp上文件最后修改時間 294 295 /// <summary> 296 /// 獲取ftp上文件最后修改時間 297 /// </summary> 298 /// <param name="filename"></param> 299 /// <returns></returns> 300 public DateTime GetftpFileslastModifiedTime(string filename) 301 { 302 DateTime lastmodified = new DateTime(); 303 try 304 { 305 if (ftpconn()) 306 { 307 reqFTP = getFTPwbRequest(filename, WebRequestMethods.Ftp.GetDateTimestamp); 308 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 309 lastmodified = response.LastModified; 310 response.Close(); 311 } 312 } 313 catch (Exception ex) 314 { 315 Common.debugPrint(ex.Message + "EasyonFtp類 GetftpFileslastModifiedTime()"); 316 } 317 return lastmodified; 318 } 319 #endregion 320 #region 獲取FTP文件的長度 321 322 323 public long GetftpFilesLength(string filename) 324 { 325 long length = 0; 326 try 327 { 328 if (ftpconn()) 329 { 330 reqFTP = getFTPwbRequest(filename, WebRequestMethods.Ftp.GetFileSize); 331 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 332 length = response.ContentLength; 333 } 334 } 335 catch (Exception ex) 336 { 337 Common.debugPrint(ex.Message + "EasyonFtp類 GetftpFilesLength() "); 338 } 339 return length; 340 } 341 #endregion 342 #region 獲取ftp目錄下文件信息 343 344 /// <summary> 345 /// 獲取ftp目錄下文件和文件夾信息(只獲取當前目錄信息) 346 /// </summary> 347 /// <param name="ftpFile">ftp目錄</param> 348 /// <returns></returns> 349 public FileStruct[] ftpListFiles(string ftpFile) 350 { 351 352 FileStruct[] list = null; 353 try 354 { 355 if (ftpconn()) 356 { 357 reqFTP = getFTPwbRequest(ftpFile, WebRequestMethods.Ftp.ListDirectoryDetails); 358 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 359 StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.Default); 360 string Datastring = stream.ReadToEnd(); 361 DirectoryListParser parser = new DirectoryListParser(Datastring); 362 list = parser.FullListing; 363 response.Close(); 364 //char[] seperator = { '\n' }; 365 //list = Datastring.Split(seperator); 366 367 return list; 368 } 369 } 370 catch (Exception ex) 371 { 372 Common.debugPrint(ex.Message + "EasyonFtp類 GetftpFilesLength()"); 373 } 374 return list; 375 } 376 #endregion 377 #region FtpWebRequest請求 378 379 /// <summary> 380 /// 獲取FtpWebRequest 381 /// </summary> 382 /// <param name="ftpFilepath">ftp文件/目錄路徑</param> 383 /// <param name="Method">WebRequestMethods.Ftp.Method</param> 384 /// <returns></returns> 385 public FtpWebRequest getFTPwbRequest(string ftpFilepath, string Method) 386 { 387 try 388 { 389 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpFilepath)); 390 reqFTP.Method = Method; 391 reqFTP.KeepAlive = true; 392 reqFTP.UseBinary = true; 393 } 394 catch (Exception ex) 395 { 396 Common.debugPrint(ex.Message + "EasyononFtp獲取FtpWebRequest失敗"); 397 return null; 398 } 399 try 400 { 401 reqFTP.Credentials = new NetworkCredential(user, pwd); 402 403 } 404 catch (Exception ex) 405 { 406 Common.debugPrint(ex.Message); 407 } 408 return reqFTP; 409 410 } 411 public FtpWebRequest getFTPwbRequest1(string ftpFilepath, string Method) 412 { 413 try 414 { 415 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpFilepath)); 416 reqFTP.Method = Method; 417 //reqFTP.KeepAlive = true; 418 reqFTP.UseBinary = true; 419 } 420 catch (Exception ex) 421 { 422 Common.debugPrint(ex.Message + "EasyononFtp獲取FtpWebRequest失敗"); 423 return null; 424 } 425 try 426 { 427 reqFTP.Credentials = new NetworkCredential(user, pwd); 428 429 } 430 catch (Exception ex) 431 { 432 Common.debugPrint(ex.Message); 433 } 434 return reqFTP; 435 436 } 437 #endregion 438 #region 下載文件流輸出處理 439 440 /// <summary> 441 /// 下載文件流輸出處理方法 442 /// </summary> 443 /// <param name="filePath">ftp文件路徑</param> 444 /// <param name="ftpStream">IO流</param> 445 /// <returns></returns> 446 private bool outputStream(string filePath, Stream ftpStream) 447 { 448 FileStream outputStream = new FileStream(filePath, FileMode.Append, FileAccess.Write); 449 450 int bufferSize = 2048*1000; 451 452 int readCount; 453 454 byte[] buffer = new byte[bufferSize]; 455 try 456 { 457 readCount = ftpStream.Read(buffer, 0, bufferSize); 458 while (readCount > 0) 459 { 460 outputStream.Write(buffer, 0, readCount); 461 readCount = ftpStream.Read(buffer, 0, bufferSize); 462 } 463 return true; 464 } 465 catch (Exception ex) 466 { 467 Common.debugPrint(ex.Message.ToString() + "EasyononFtp類下載文件流輸出處理方法異常"); 468 return false; 469 } 470 finally 471 { 472 outputStream.Close(); 473 } 474 } 475 #endregion 476 #region 上傳文件流輸出處理 477 /// <summary> 478 /// 上傳文件流輸出處理方法 479 /// </summary> 480 /// <param name="fileinfo">文件信息</param> 481 /// <param name="ftpStream">IO流</param> 482 /// <returns></returns> 483 private bool inputStream(string filePath, Stream ftpStream, long Breakpoint) 484 { 485 486 // 打開一個文件流(System.IO.FileStream) 去讀上傳的文件 487 FileStream outputStream = new FileStream(filePath, FileMode.Open); 488 489 // 緩沖大小設置為kb 490 int bufferSize = 2048 * 1000; 491 492 int readCount; 493 494 byte[] buffer = new byte[bufferSize]; 495 try 496 { 497 if (Breakpoint > 0) 498 { 499 outputStream.Seek(Breakpoint, SeekOrigin.Current); 500 501 502 } 503 504 readCount = outputStream.Read(buffer, 0, bufferSize); 505 506 while (readCount > 0) 507 { 508 // 把內容從file stream 寫入upload stream 509 ftpStream.Write(buffer, 0, readCount); 510 readCount = outputStream.Read(buffer, 0, bufferSize); 511 512 // 513 } 514 515 return true; 516 } 517 catch (Exception ex) 518 { 519 Common.debugPrint(ex.Message.ToString() + "上傳文件流輸出處理方法異常"); 520 return false; 521 } 522 finally 523 { 524 outputStream.Close(); 525 } 526 } 527 #endregion 528 529 } 530 }

如果有哪位大大能給排本提供幫助,在園子逛的也蠻久了,發現很多都排的挺漂亮的。

轉載于:https://www.cnblogs.com/cnwisdom/archive/2012/12/28/2837112.html

總結

以上是生活随笔為你收集整理的关于ftp的功能类——下载,上传,断点,连接的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。