| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Text;
- using System.Threading.Tasks;
- namespace TrainVideoDataDispose
- {
- public class ftpHelper
- {
- /// <summary>
- /// 获取当前目录下文件夹
- /// </summary>
- /// <returns></returns>
- public string[] GetFilesDirList()
- {
- try
- {
- ftpHelper ftp1 = new ftpHelper("10.111.16.113","", "300t", "300t");
-
-
- List<string> result = new List<string>();
- List<string> resultTxt = new List<string>();
- List<string> resultJpg = new List<string>();
- List<string> resultMp4 = new List<string>();
- FtpWebRequest ftp;
- ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://10.111.16.113"));
- ftp.Credentials = new NetworkCredential("300t", "300t");
- ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;//目录
- WebResponse response = ftp.GetResponse();//response为一个ftp的WebResponse
- StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);//读入responses所创建的数据流
- string line = reader.ReadLine();//输入流中的下一行;如果到达了输入流的末尾,则为空引用
- while (line != null)
- {
- result.Add(line);//)Append 方法可用来将文本或对象的字符串表示形式添加到由当前 StringBuilder 对象表示的字符串的结尾处。
- line = reader.ReadLine();
- //Download();
- }
- foreach (var item in result)
- {
- if (item.Contains(".txt"))
- {
- resultTxt.Add(item);
- }
- }
- foreach (var item in result)
- {
- if (item.Contains(".jpeg"))
- {
- resultJpg.Add(item);
- }
- }
- foreach (var item in result)
- {
- if (item.Contains(".mp4"))
- {
- resultMp4.Add(item);
- }
- }
- string pathImg = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + DateTime.Now.ToString("yyyy") + "/" + DateTime.Now.ToString("MM") + "/" + DateTime.Now.ToString("dd") + "/img";
- string pathTxt = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + DateTime.Now.ToString("yyyy") + "/" + DateTime.Now.ToString("MM") + "/" + DateTime.Now.ToString("dd") + "/txt";
- string pathMp4 = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + DateTime.Now.ToString("yyyy") + "/" + DateTime.Now.ToString("MM") + "/" + DateTime.Now.ToString("dd") + "/movie";
- if (!Directory.Exists(pathImg))
- {
- Directory.CreateDirectory(pathImg);
- }
- if (!Directory.Exists(pathTxt))
- {
- Directory.CreateDirectory(pathTxt);
- }
- if (!Directory.Exists(pathMp4))
- {
- Directory.CreateDirectory(pathMp4);
- }
- foreach (var item in resultTxt)
- {
- string fileName = item.Substring(item.Length - 23);
- ftp1.Download(pathTxt, fileName);
- ftp1.MovieFile("/" + fileName, "deletes/txt/" + fileName);
- }
- foreach (var item in resultMp4)
- {
- string fileName = item.Substring(item.Length - 23);
- ftp1.Download(pathMp4, fileName);
- ftp1.MovieFile("/" + fileName, "deletes/movie/" + fileName);
- }
- foreach (var item in resultJpg)
- {
- string fileName = item.Substring(item.Length - 26);
- ftp1.Download(pathImg, fileName);
- ftp1.MovieFile("/" + fileName, "deletes/img/" + fileName);
- }
- reader.Close();
- response.Close();
- return result.ToString().Split('\n');
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
-
- string ftpServerIP; //10.111.16.113
- string ftpRemotePath;
- string ftpUserID; //300t
- string ftpPassword; //300t
- string ftpURI;
- private string strFilePath = System.Environment.CurrentDirectory;//路径
- /// <summary>
- /// 连接FTP
- /// </summary>
- /// <param name="FtpServerIP">FTP连接地址</param>
- /// <param name="FtpRemotePath">指定FTP连接成功后的当前目录, 如果不指定即默认为根目录</param>
- /// <param name="FtpUserID">用户名</param>
- /// <param name="FtpPassword">密码</param>
- public ftpHelper(string FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword)
- {
- ftpServerIP = FtpServerIP;
- ftpRemotePath = FtpRemotePath;
- ftpUserID = FtpUserID;
- ftpPassword = FtpPassword;
- ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
- }
- /// <summary>
- /// 上传
- /// </summary>
- /// <param name="filename"></param>
- public void Upload(string filename)
- {
- FileInfo fileInf = new FileInfo(filename);
- string uri = ftpURI + fileInf.Name;
- FtpWebRequest reqFTP;
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
- reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
- reqFTP.KeepAlive = false;
- reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
- reqFTP.UseBinary = true;
- reqFTP.ContentLength = fileInf.Length;
- int buffLength = 2048;
- byte[] buff = new byte[buffLength];
- int contentLen;
- FileStream fs = fileInf.OpenRead();
- try
- {
- Stream strm = reqFTP.GetRequestStream();
- contentLen = fs.Read(buff, 0, buffLength);
- while (contentLen != 0)
- {
- strm.Write(buff, 0, contentLen);
- contentLen = fs.Read(buff, 0, buffLength);
- }
- strm.Close();
- fs.Close();
- }
- catch (Exception ex)
- {
- WriteLog("Upload Error --> " + ex.Message);
- }
- }
- /// <summary>
- /// 下载
- /// </summary>
- /// <param name="filePath"></param>
- /// <param name="fileName"></param>
- public void Download(string filePath, string fileName)
- {
- FtpWebRequest reqFTP;
- try
- {
- FileStream outputStream = new FileStream(filePath + "//" + fileName, FileMode.Create);
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));
- reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
- reqFTP.UseBinary = true;
- reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
- FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
- Stream ftpStream = response.GetResponseStream();
- long cl = response.ContentLength;
- int bufferSize = 2048;
- int readCount;
- byte[] buffer = new byte[bufferSize];
- readCount = ftpStream.Read(buffer, 0, bufferSize);
- while (readCount > 0)
- {
- outputStream.Write(buffer, 0, readCount);
- readCount = ftpStream.Read(buffer, 0, bufferSize);
- }
- ftpStream.Close();
- outputStream.Close();
- response.Close();
- }
- catch (Exception ex)
- {
- WriteLog("Download Error --> " + ex.Message);
- }
- }
- /// <summary>
- /// 删除文件
- /// </summary>
- /// <param name="fileName"></param>
- public void Delete(string fileName)
- {
- try
- {
- string uri = ftpURI + fileName;
- FtpWebRequest reqFTP;
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
- reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
- reqFTP.KeepAlive = false;
- reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
- string result = String.Empty;
- FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
- long size = response.ContentLength;
- Stream datastream = response.GetResponseStream();
- StreamReader sr = new StreamReader(datastream);
- result = sr.ReadToEnd();
- sr.Close();
- datastream.Close();
- response.Close();
- }
- catch (Exception ex)
- {
- WriteLog("Delete Error --> " + ex.Message + " 文件名:" + fileName);
- }
- }
- /// <summary>
- /// 获取当前目录下明细(包含文件和文件夹)
- /// </summary>
- /// <returns></returns>
- public string[] GetFilesDetailList()
- {
- string[] downloadFiles;
- try
- {
- StringBuilder result = new StringBuilder();
- FtpWebRequest ftp;
- ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
- ftp.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
- ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
- WebResponse response = ftp.GetResponse();
- StreamReader reader = new StreamReader(response.GetResponseStream());
- string line = reader.ReadLine();
- line = reader.ReadLine();
- line = reader.ReadLine();
- while (line != null)
- {
- result.Append(line);
- result.Append("\n");
- line = reader.ReadLine();
- }
- result.Remove(result.ToString().LastIndexOf("\n"), 1);
- reader.Close();
- response.Close();
- return result.ToString().Split('\n');
- }
- catch (Exception ex)
- {
- downloadFiles = null;
- WriteLog("GetFilesDetailList Error --> " + ex.Message);
- return downloadFiles;
- }
- }
- /// <summary>
- /// 获取当前目录下文件列表(仅文件)
- /// </summary>
- /// <returns></returns>
- public string[] GetFileList(string mask)
- {
- string[] downloadFiles;
- StringBuilder result = new StringBuilder();
- FtpWebRequest reqFTP;
- try
- {
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
- reqFTP.UseBinary = true;
- reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
- reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
- WebResponse response = reqFTP.GetResponse();
- StreamReader reader = new StreamReader(response.GetResponseStream());
- string line = reader.ReadLine();
- while (line != null)
- {
- if (mask.Trim() != string.Empty && mask.Trim() != "*.*")
- {
- string mask_ = mask.Substring(0, mask.IndexOf("*"));
- if (line.Substring(0, mask_.Length) == mask_)
- {
- result.Append(line);
- result.Append("\n");
- }
- }
- else
- {
- result.Append(line);
- result.Append("\n");
- }
- line = reader.ReadLine();
- }
- result.Remove(result.ToString().LastIndexOf('\n'), 1);
- reader.Close();
- response.Close();
- return result.ToString().Split('\n');
- }
- catch (Exception ex)
- {
- downloadFiles = null;
- if (ex.Message.Trim() != "远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。")
- {
- WriteLog("GetFileList Error --> " + ex.Message);
- }
- return downloadFiles;
- }
- }
- /// <summary>
- /// 获取当前目录下所有的文件夹列表(仅文件夹)
- /// </summary>
- /// <returns></returns>
- public string[] GetDirectoryList()
- {
- string[] drectory = GetFilesDetailList();
- string m = string.Empty;
- foreach (string str in drectory)
- {
- if (str.Trim().Substring(0, 1).ToUpper() == "D")
- {
- m += str.Substring(54).Trim() + "\n";
- }
- }
- char[] n = new char[] { '\n' };
- return m.Split(n);
- }
- /// <summary>
- /// 判断当前目录下指定的子目录是否存在
- /// </summary>
- /// <param name="RemoteDirectoryName">指定的目录名</param>
- public bool DirectoryExist(string RemoteDirectoryName)
- {
- string[] dirList = GetDirectoryList();
- foreach (string str in dirList)
- {
- if (str.Trim() == RemoteDirectoryName.Trim())
- {
- return true;
- }
- }
- return false;
- }
- /// <summary>
- /// 判断当前目录下指定的文件是否存在
- /// </summary>
- /// <param name="RemoteFileName">远程文件名</param>
- public bool FileExist(string RemoteFileName)
- {
- string[] fileList = GetFileList("*.*");
- foreach (string str in fileList)
- {
- if (str.Trim() == RemoteFileName.Trim())
- {
- return true;
- }
- }
- return false;
- }
- /// <summary>
- /// 创建文件夹
- /// </summary>
- /// <param name="dirName"></param>
- public void MakeDir(string dirName)
- {
- FtpWebRequest reqFTP;
- try
- {
- // dirName = name of the directory to create.
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + dirName));
- reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
- reqFTP.UseBinary = true;
- reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
- FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
- Stream ftpStream = response.GetResponseStream();
- ftpStream.Close();
- response.Close();
- }
- catch (Exception ex)
- {
- WriteLog("MakeDir Error --> " + ex.Message);
- }
- }
- /// <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(ftpURI + filename));
- reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
- reqFTP.UseBinary = true;
- reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
- FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
- Stream ftpStream = response.GetResponseStream();
- fileSize = response.ContentLength;
- ftpStream.Close();
- response.Close();
- }
- catch (Exception ex)
- {
- WriteLog("GetFileSize Error --> " + ex.Message);
- }
- return fileSize;
- }
- /// <summary>
- /// 改名
- /// </summary>
- /// <param name="currentFilename"></param>
- /// <param name="newFilename"></param>
- public void ReName(string currentFilename, string newFilename)
- {
- FtpWebRequest reqFTP;
- try
- {
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + currentFilename));
- reqFTP.Method = WebRequestMethods.Ftp.Rename;
- reqFTP.RenameTo = newFilename;
- reqFTP.UseBinary = true;
- reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
- FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
- Stream ftpStream = response.GetResponseStream();
- ftpStream.Close();
- response.Close();
- }
- catch (Exception ex)
- {
- WriteLog("ReName Error --> " + ex.Message);
- }
- }
- /// <summary>
- /// 移动文件
- /// </summary>
- /// <param name="currentFilename"></param>
- /// <param name="newFilename"></param>
- public void MovieFile(string currentFilename, string newDirectory)
- {
- ReName(currentFilename, newDirectory);
- }
- /// <summary>
- /// 切换当前目录
- /// </summary>
- /// <param name="DirectoryName"></param>
- /// <param name="IsRoot">true 绝对路径 false 相对路径</param>
- public void GotoDirectory(string DirectoryName, bool IsRoot)
- {
- if (IsRoot)
- {
- ftpRemotePath = DirectoryName;
- }
- else
- {
- ftpRemotePath += DirectoryName + "/";
- }
- ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
- }
- private void WriteLog(string str)
- {
- if (System.IO.Directory.Exists(strFilePath + "\\log") == false)
- {
- System.IO.Directory.CreateDirectory(strFilePath + "\\log");
- }
- string strDate = System.DateTime.Now.ToString("yyyyMMdd");
- System.IO.TextWriter tw = new System.IO.StreamWriter(strFilePath + "\\log\\" + "FTP_" + strDate + ".log", true);
- tw.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- tw.WriteLine(str);
- tw.WriteLine("\r\n");
- tw.Close();
- }
- }
- }
|