ftpHelper.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace TrainVideoDataDispose
  9. {
  10. public class ftpHelper
  11. {
  12. /// <summary>
  13. /// 获取当前目录下文件夹
  14. /// </summary>
  15. /// <returns></returns>
  16. public string[] GetFilesDirList()
  17. {
  18. try
  19. {
  20. ftpHelper ftp1 = new ftpHelper("10.111.16.113","", "300t", "300t");
  21. List<string> result = new List<string>();
  22. List<string> resultTxt = new List<string>();
  23. List<string> resultJpg = new List<string>();
  24. List<string> resultMp4 = new List<string>();
  25. FtpWebRequest ftp;
  26. ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://10.111.16.113"));
  27. ftp.Credentials = new NetworkCredential("300t", "300t");
  28. ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;//目录
  29. WebResponse response = ftp.GetResponse();//response为一个ftp的WebResponse
  30. StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);//读入responses所创建的数据流
  31. string line = reader.ReadLine();//输入流中的下一行;如果到达了输入流的末尾,则为空引用
  32. while (line != null)
  33. {
  34. result.Add(line);//)Append 方法可用来将文本或对象的字符串表示形式添加到由当前 StringBuilder 对象表示的字符串的结尾处。
  35. line = reader.ReadLine();
  36. //Download();
  37. }
  38. foreach (var item in result)
  39. {
  40. if (item.Contains(".txt"))
  41. {
  42. resultTxt.Add(item);
  43. }
  44. }
  45. foreach (var item in result)
  46. {
  47. if (item.Contains(".jpeg"))
  48. {
  49. resultJpg.Add(item);
  50. }
  51. }
  52. foreach (var item in result)
  53. {
  54. if (item.Contains(".mp4"))
  55. {
  56. resultMp4.Add(item);
  57. }
  58. }
  59. string pathImg = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + DateTime.Now.ToString("yyyy") + "/" + DateTime.Now.ToString("MM") + "/" + DateTime.Now.ToString("dd") + "/img";
  60. string pathTxt = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + DateTime.Now.ToString("yyyy") + "/" + DateTime.Now.ToString("MM") + "/" + DateTime.Now.ToString("dd") + "/txt";
  61. string pathMp4 = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + DateTime.Now.ToString("yyyy") + "/" + DateTime.Now.ToString("MM") + "/" + DateTime.Now.ToString("dd") + "/movie";
  62. if (!Directory.Exists(pathImg))
  63. {
  64. Directory.CreateDirectory(pathImg);
  65. }
  66. if (!Directory.Exists(pathTxt))
  67. {
  68. Directory.CreateDirectory(pathTxt);
  69. }
  70. if (!Directory.Exists(pathMp4))
  71. {
  72. Directory.CreateDirectory(pathMp4);
  73. }
  74. foreach (var item in resultTxt)
  75. {
  76. string fileName = item.Substring(item.Length - 23);
  77. ftp1.Download(pathTxt, fileName);
  78. ftp1.MovieFile("/" + fileName, "deletes/txt/" + fileName);
  79. }
  80. foreach (var item in resultMp4)
  81. {
  82. string fileName = item.Substring(item.Length - 23);
  83. ftp1.Download(pathMp4, fileName);
  84. ftp1.MovieFile("/" + fileName, "deletes/movie/" + fileName);
  85. }
  86. foreach (var item in resultJpg)
  87. {
  88. string fileName = item.Substring(item.Length - 26);
  89. ftp1.Download(pathImg, fileName);
  90. ftp1.MovieFile("/" + fileName, "deletes/img/" + fileName);
  91. }
  92. reader.Close();
  93. response.Close();
  94. return result.ToString().Split('\n');
  95. }
  96. catch (Exception ex)
  97. {
  98. throw ex;
  99. }
  100. }
  101. string ftpServerIP; //10.111.16.113
  102. string ftpRemotePath;
  103. string ftpUserID; //300t
  104. string ftpPassword; //300t
  105. string ftpURI;
  106. private string strFilePath = System.Environment.CurrentDirectory;//路径
  107. /// <summary>
  108. /// 连接FTP
  109. /// </summary>
  110. /// <param name="FtpServerIP">FTP连接地址</param>
  111. /// <param name="FtpRemotePath">指定FTP连接成功后的当前目录, 如果不指定即默认为根目录</param>
  112. /// <param name="FtpUserID">用户名</param>
  113. /// <param name="FtpPassword">密码</param>
  114. public ftpHelper(string FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword)
  115. {
  116. ftpServerIP = FtpServerIP;
  117. ftpRemotePath = FtpRemotePath;
  118. ftpUserID = FtpUserID;
  119. ftpPassword = FtpPassword;
  120. ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
  121. }
  122. /// <summary>
  123. /// 上传
  124. /// </summary>
  125. /// <param name="filename"></param>
  126. public void Upload(string filename)
  127. {
  128. FileInfo fileInf = new FileInfo(filename);
  129. string uri = ftpURI + fileInf.Name;
  130. FtpWebRequest reqFTP;
  131. reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
  132. reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  133. reqFTP.KeepAlive = false;
  134. reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
  135. reqFTP.UseBinary = true;
  136. reqFTP.ContentLength = fileInf.Length;
  137. int buffLength = 2048;
  138. byte[] buff = new byte[buffLength];
  139. int contentLen;
  140. FileStream fs = fileInf.OpenRead();
  141. try
  142. {
  143. Stream strm = reqFTP.GetRequestStream();
  144. contentLen = fs.Read(buff, 0, buffLength);
  145. while (contentLen != 0)
  146. {
  147. strm.Write(buff, 0, contentLen);
  148. contentLen = fs.Read(buff, 0, buffLength);
  149. }
  150. strm.Close();
  151. fs.Close();
  152. }
  153. catch (Exception ex)
  154. {
  155. WriteLog("Upload Error --> " + ex.Message);
  156. }
  157. }
  158. /// <summary>
  159. /// 下载
  160. /// </summary>
  161. /// <param name="filePath"></param>
  162. /// <param name="fileName"></param>
  163. public void Download(string filePath, string fileName)
  164. {
  165. FtpWebRequest reqFTP;
  166. try
  167. {
  168. FileStream outputStream = new FileStream(filePath + "//" + fileName, FileMode.Create);
  169. reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));
  170. reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
  171. reqFTP.UseBinary = true;
  172. reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  173. FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  174. Stream ftpStream = response.GetResponseStream();
  175. long cl = response.ContentLength;
  176. int bufferSize = 2048;
  177. int readCount;
  178. byte[] buffer = new byte[bufferSize];
  179. readCount = ftpStream.Read(buffer, 0, bufferSize);
  180. while (readCount > 0)
  181. {
  182. outputStream.Write(buffer, 0, readCount);
  183. readCount = ftpStream.Read(buffer, 0, bufferSize);
  184. }
  185. ftpStream.Close();
  186. outputStream.Close();
  187. response.Close();
  188. }
  189. catch (Exception ex)
  190. {
  191. WriteLog("Download Error --> " + ex.Message);
  192. }
  193. }
  194. /// <summary>
  195. /// 删除文件
  196. /// </summary>
  197. /// <param name="fileName"></param>
  198. public void Delete(string fileName)
  199. {
  200. try
  201. {
  202. string uri = ftpURI + fileName;
  203. FtpWebRequest reqFTP;
  204. reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
  205. reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  206. reqFTP.KeepAlive = false;
  207. reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
  208. string result = String.Empty;
  209. FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  210. long size = response.ContentLength;
  211. Stream datastream = response.GetResponseStream();
  212. StreamReader sr = new StreamReader(datastream);
  213. result = sr.ReadToEnd();
  214. sr.Close();
  215. datastream.Close();
  216. response.Close();
  217. }
  218. catch (Exception ex)
  219. {
  220. WriteLog("Delete Error --> " + ex.Message + " 文件名:" + fileName);
  221. }
  222. }
  223. /// <summary>
  224. /// 获取当前目录下明细(包含文件和文件夹)
  225. /// </summary>
  226. /// <returns></returns>
  227. public string[] GetFilesDetailList()
  228. {
  229. string[] downloadFiles;
  230. try
  231. {
  232. StringBuilder result = new StringBuilder();
  233. FtpWebRequest ftp;
  234. ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
  235. ftp.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  236. ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
  237. WebResponse response = ftp.GetResponse();
  238. StreamReader reader = new StreamReader(response.GetResponseStream());
  239. string line = reader.ReadLine();
  240. line = reader.ReadLine();
  241. line = reader.ReadLine();
  242. while (line != null)
  243. {
  244. result.Append(line);
  245. result.Append("\n");
  246. line = reader.ReadLine();
  247. }
  248. result.Remove(result.ToString().LastIndexOf("\n"), 1);
  249. reader.Close();
  250. response.Close();
  251. return result.ToString().Split('\n');
  252. }
  253. catch (Exception ex)
  254. {
  255. downloadFiles = null;
  256. WriteLog("GetFilesDetailList Error --> " + ex.Message);
  257. return downloadFiles;
  258. }
  259. }
  260. /// <summary>
  261. /// 获取当前目录下文件列表(仅文件)
  262. /// </summary>
  263. /// <returns></returns>
  264. public string[] GetFileList(string mask)
  265. {
  266. string[] downloadFiles;
  267. StringBuilder result = new StringBuilder();
  268. FtpWebRequest reqFTP;
  269. try
  270. {
  271. reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
  272. reqFTP.UseBinary = true;
  273. reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  274. reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
  275. WebResponse response = reqFTP.GetResponse();
  276. StreamReader reader = new StreamReader(response.GetResponseStream());
  277. string line = reader.ReadLine();
  278. while (line != null)
  279. {
  280. if (mask.Trim() != string.Empty && mask.Trim() != "*.*")
  281. {
  282. string mask_ = mask.Substring(0, mask.IndexOf("*"));
  283. if (line.Substring(0, mask_.Length) == mask_)
  284. {
  285. result.Append(line);
  286. result.Append("\n");
  287. }
  288. }
  289. else
  290. {
  291. result.Append(line);
  292. result.Append("\n");
  293. }
  294. line = reader.ReadLine();
  295. }
  296. result.Remove(result.ToString().LastIndexOf('\n'), 1);
  297. reader.Close();
  298. response.Close();
  299. return result.ToString().Split('\n');
  300. }
  301. catch (Exception ex)
  302. {
  303. downloadFiles = null;
  304. if (ex.Message.Trim() != "远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。")
  305. {
  306. WriteLog("GetFileList Error --> " + ex.Message);
  307. }
  308. return downloadFiles;
  309. }
  310. }
  311. /// <summary>
  312. /// 获取当前目录下所有的文件夹列表(仅文件夹)
  313. /// </summary>
  314. /// <returns></returns>
  315. public string[] GetDirectoryList()
  316. {
  317. string[] drectory = GetFilesDetailList();
  318. string m = string.Empty;
  319. foreach (string str in drectory)
  320. {
  321. if (str.Trim().Substring(0, 1).ToUpper() == "D")
  322. {
  323. m += str.Substring(54).Trim() + "\n";
  324. }
  325. }
  326. char[] n = new char[] { '\n' };
  327. return m.Split(n);
  328. }
  329. /// <summary>
  330. /// 判断当前目录下指定的子目录是否存在
  331. /// </summary>
  332. /// <param name="RemoteDirectoryName">指定的目录名</param>
  333. public bool DirectoryExist(string RemoteDirectoryName)
  334. {
  335. string[] dirList = GetDirectoryList();
  336. foreach (string str in dirList)
  337. {
  338. if (str.Trim() == RemoteDirectoryName.Trim())
  339. {
  340. return true;
  341. }
  342. }
  343. return false;
  344. }
  345. /// <summary>
  346. /// 判断当前目录下指定的文件是否存在
  347. /// </summary>
  348. /// <param name="RemoteFileName">远程文件名</param>
  349. public bool FileExist(string RemoteFileName)
  350. {
  351. string[] fileList = GetFileList("*.*");
  352. foreach (string str in fileList)
  353. {
  354. if (str.Trim() == RemoteFileName.Trim())
  355. {
  356. return true;
  357. }
  358. }
  359. return false;
  360. }
  361. /// <summary>
  362. /// 创建文件夹
  363. /// </summary>
  364. /// <param name="dirName"></param>
  365. public void MakeDir(string dirName)
  366. {
  367. FtpWebRequest reqFTP;
  368. try
  369. {
  370. // dirName = name of the directory to create.
  371. reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + dirName));
  372. reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
  373. reqFTP.UseBinary = true;
  374. reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  375. FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  376. Stream ftpStream = response.GetResponseStream();
  377. ftpStream.Close();
  378. response.Close();
  379. }
  380. catch (Exception ex)
  381. {
  382. WriteLog("MakeDir Error --> " + ex.Message);
  383. }
  384. }
  385. /// <summary>
  386. /// 获取指定文件大小
  387. /// </summary>
  388. /// <param name="filename"></param>
  389. /// <returns></returns>
  390. public long GetFileSize(string filename)
  391. {
  392. FtpWebRequest reqFTP;
  393. long fileSize = 0;
  394. try
  395. {
  396. reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + filename));
  397. reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
  398. reqFTP.UseBinary = true;
  399. reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  400. FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  401. Stream ftpStream = response.GetResponseStream();
  402. fileSize = response.ContentLength;
  403. ftpStream.Close();
  404. response.Close();
  405. }
  406. catch (Exception ex)
  407. {
  408. WriteLog("GetFileSize Error --> " + ex.Message);
  409. }
  410. return fileSize;
  411. }
  412. /// <summary>
  413. /// 改名
  414. /// </summary>
  415. /// <param name="currentFilename"></param>
  416. /// <param name="newFilename"></param>
  417. public void ReName(string currentFilename, string newFilename)
  418. {
  419. FtpWebRequest reqFTP;
  420. try
  421. {
  422. reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + currentFilename));
  423. reqFTP.Method = WebRequestMethods.Ftp.Rename;
  424. reqFTP.RenameTo = newFilename;
  425. reqFTP.UseBinary = true;
  426. reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  427. FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
  428. Stream ftpStream = response.GetResponseStream();
  429. ftpStream.Close();
  430. response.Close();
  431. }
  432. catch (Exception ex)
  433. {
  434. WriteLog("ReName Error --> " + ex.Message);
  435. }
  436. }
  437. /// <summary>
  438. /// 移动文件
  439. /// </summary>
  440. /// <param name="currentFilename"></param>
  441. /// <param name="newFilename"></param>
  442. public void MovieFile(string currentFilename, string newDirectory)
  443. {
  444. ReName(currentFilename, newDirectory);
  445. }
  446. /// <summary>
  447. /// 切换当前目录
  448. /// </summary>
  449. /// <param name="DirectoryName"></param>
  450. /// <param name="IsRoot">true 绝对路径 false 相对路径</param>
  451. public void GotoDirectory(string DirectoryName, bool IsRoot)
  452. {
  453. if (IsRoot)
  454. {
  455. ftpRemotePath = DirectoryName;
  456. }
  457. else
  458. {
  459. ftpRemotePath += DirectoryName + "/";
  460. }
  461. ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
  462. }
  463. private void WriteLog(string str)
  464. {
  465. if (System.IO.Directory.Exists(strFilePath + "\\log") == false)
  466. {
  467. System.IO.Directory.CreateDirectory(strFilePath + "\\log");
  468. }
  469. string strDate = System.DateTime.Now.ToString("yyyyMMdd");
  470. System.IO.TextWriter tw = new System.IO.StreamWriter(strFilePath + "\\log\\" + "FTP_" + strDate + ".log", true);
  471. tw.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  472. tw.WriteLine(str);
  473. tw.WriteLine("\r\n");
  474. tw.Close();
  475. }
  476. }
  477. }