123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.IO;
- using System.Net;
- using System.Text.RegularExpressions;
- namespace Ant.Service.Utilities
- {
- public class FTPHelper
- {
- #region 字段
- string ftpURI;
- string ftpUserID;
- string ftpServerIP;
- string ftpPassword;
- string ftpRemotePath;
- #endregion
- /// <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>
- public void Upload(string filename)
- {
- FileInfo fileInf = new FileInfo(filename);
- FtpWebRequest reqFTP;
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileInf.Name));
- reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
- reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
- reqFTP.KeepAlive = false;
- 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)
- {
- throw new Exception(ex.Message);
- }
- }
- /// <summary>
- /// 下载
- /// </summary>
- public void Download(string filePath, string fileName)
- {
- try
- {
- FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
- FtpWebRequest reqFTP;
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));
- reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
- reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
- reqFTP.UseBinary = true;
- 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)
- {
- throw new Exception(ex.Message);
- }
- }
- /// <summary>
- /// 删除文件
- /// </summary>
- public void Delete(string fileName)
- {
- try
- {
- FtpWebRequest reqFTP;
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));
- reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
- reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
- reqFTP.KeepAlive = false;
- 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)
- {
- throw new Exception(ex.Message);
- }
- }
- /// <summary>
- /// 获取当前目录下明细(包含文件和文件夹)
- /// </summary>
- public string[] GetFilesDetailList()
- {
- 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)
- {
- throw new Exception(ex.Message);
- }
- }
- /// <summary>
- /// 获取FTP文件列表(包括文件夹)
- /// </summary>
- private string[] GetAllList(string url)
- {
- List<string> list = new List<string>();
- FtpWebRequest req = (FtpWebRequest)WebRequest.Create(new Uri(url));
- req.Credentials = new NetworkCredential(ftpPassword, ftpPassword);
- req.Method = WebRequestMethods.Ftp.ListDirectory;
- req.UseBinary = true;
- req.UsePassive = true;
- try
- {
- using (FtpWebResponse res = (FtpWebResponse)req.GetResponse())
- {
- using (StreamReader sr = new StreamReader(res.GetResponseStream()))
- {
- string s;
- while ((s = sr.ReadLine()) != null)
- {
- list.Add(s);
- }
- }
- }
- }
- catch (Exception ex)
- {
- throw (ex);
- }
- return list.ToArray();
- }
- /// <summary>
- /// 获取当前目录下文件列表(不包括文件夹)
- /// </summary>
- public string[] GetFileList(string url)
- {
- StringBuilder result = new StringBuilder();
- FtpWebRequest reqFTP;
- try
- {
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));
- reqFTP.UseBinary = true;
- reqFTP.Credentials = new NetworkCredential(ftpPassword, ftpPassword);
- reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
- WebResponse response = reqFTP.GetResponse();
- StreamReader reader = new StreamReader(response.GetResponseStream());
- string line = reader.ReadLine();
- while (line != null)
- {
- if (line.IndexOf("<DIR>") == -1)
- {
- result.Append(Regex.Match(line, @"[\S]+ [\S]+", RegexOptions.IgnoreCase).Value.Split(' ')[1]);
- result.Append("\n");
- }
- line = reader.ReadLine();
- }
- result.Remove(result.ToString().LastIndexOf('\n'), 1);
- reader.Close();
- response.Close();
- }
- catch (Exception ex)
- {
- throw (ex);
- }
- return result.ToString().Split('\n');
- }
- /// <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>
- public void MakeDir(string dirName)
- {
- FtpWebRequest reqFTP;
- try
- {
- 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)
- { }
- }
- /// <summary>
- /// 获取指定文件大小
- /// </summary>
- 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)
- { }
- return fileSize;
- }
- /// <summary>
- /// 更改文件名
- /// </summary>
- 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)
- { }
- }
- /// <summary>
- /// 移动文件
- /// </summary>
- public void MovieFile(string currentFilename, string newDirectory)
- {
- ReName(currentFilename, newDirectory);
- }
- /// <summary>
- /// 切换当前目录
- /// </summary>
- /// <param name="IsRoot">true:绝对路径 false:相对路径</param>
- public void GotoDirectory(string DirectoryName, bool IsRoot)
- {
- if (IsRoot)
- {
- ftpRemotePath = DirectoryName;
- }
- else
- {
- ftpRemotePath += DirectoryName + "/";
- }
- ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
- }
- }
- }
|