zoukankan      html  css  js  c++  java
  • C# FTP操作类

    可进行FTP的上传,下载等其他功能,支持断点续传:

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ManagementProject
    {
        public class FTPHelper
        {
            string ftpRemotePath;
    
            #region 变量属性
            /// <summary>
            /// Ftp服务器ip
            /// </summary>
            public static string FtpServerIP = "";
            /// <summary>
            /// Ftp 指定用户名
            /// </summary>
            public static string FtpUserID = "";
            /// <summary>
            /// Ftp 指定用户密码
            /// </summary>
            public static string FtpPassword = "";
    
            public static string ftpURI = "ftp://" + FtpServerIP + "/";
    
            #endregion
    
            #region 从FTP服务器下载文件,指定本地路径和本地文件名
            /// <summary>
            /// 从FTP服务器下载文件,指定本地路径和本地文件名
            /// </summary>
            /// <param name="remoteFileName">远程文件名</param>
            /// <param name="localFileName">保存本地的文件名(包含路径)</param>
            /// <param name="ifCredential">是否启用身份验证(false:表示允许用户匿名下载)</param>
            /// <param name="updateProgress">报告进度的处理(第一个参数:总大小,第二个参数:当前进度)</param>
            /// <returns>是否下载成功</returns>
            public static bool FtpDownload(string remoteFileName, string localFileName, bool ifCredential, Action<int, int> updateProgress = null)
            {
                FtpWebRequest reqFTP, ftpsize;
                Stream ftpStream = null;
                FtpWebResponse response = null;
                FileStream outputStream = null;
                try
                {
    
                    outputStream = new FileStream(localFileName, FileMode.Create);
                    if (FtpServerIP == null || FtpServerIP.Trim().Length == 0)
                    {
                        throw new Exception("ftp下载目标服务器地址未设置!");
                    }
                    Uri uri = new Uri("ftp://" + FtpServerIP + "/" + remoteFileName);
                    ftpsize = (FtpWebRequest)FtpWebRequest.Create(uri);
                    ftpsize.UseBinary = true;
    
                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);
                    reqFTP.UseBinary = true;
                    reqFTP.KeepAlive = false;
                    if (ifCredential)//使用用户身份认证
                    {
                        ftpsize.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
                        reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
                    }
                    ftpsize.Method = WebRequestMethods.Ftp.GetFileSize;
                    FtpWebResponse re = (FtpWebResponse)ftpsize.GetResponse();
                    long totalBytes = re.ContentLength;
                    re.Close();
    
                    reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                    response = (FtpWebResponse)reqFTP.GetResponse();
                    ftpStream = response.GetResponseStream();
    
                    //更新进度  
                    if (updateProgress != null)
                    {
                        updateProgress((int)totalBytes, 0);//更新进度条   
                    }
                    long totalDownloadedByte = 0;
                    int bufferSize = 2048;
                    int readCount;
                    byte[] buffer = new byte[bufferSize];
                    readCount = ftpStream.Read(buffer, 0, bufferSize);
                    while (readCount > 0)
                    {
                        totalDownloadedByte = readCount + totalDownloadedByte;
                        outputStream.Write(buffer, 0, readCount);
                        //更新进度  
                        if (updateProgress != null)
                        {
                            updateProgress((int)totalBytes, (int)totalDownloadedByte);//更新进度条   
                        }
                        readCount = ftpStream.Read(buffer, 0, bufferSize);
                    }
                    ftpStream.Close();
                    outputStream.Close();
                    response.Close();
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                    throw;
                }
                finally
                {
                    if (ftpStream != null)
                    {
                        ftpStream.Close();
                    }
                    if (outputStream != null)
                    {
                        outputStream.Close();
                    }
                    if (response != null)
                    {
                        response.Close();
                    }
                }
            }
            /// <summary>
            /// 从FTP服务器下载文件,指定本地路径和本地文件名(支持断点下载)
            /// </summary>
            /// <param name="remoteFileName">远程文件名</param>
            /// <param name="localFileName">保存本地的文件名(包含路径)</param>
            /// <param name="ifCredential">是否启用身份验证(false:表示允许用户匿名下载)</param>
            /// <param name="size">已下载文件流大小</param>
            /// <param name="updateProgress">报告进度的处理(第一个参数:总大小,第二个参数:当前进度)</param>
            /// <returns>是否下载成功</returns>
            public static bool FtpBrokenDownload(string remoteFileName, string localFileName, bool ifCredential, long size, Action<int, int> updateProgress = null)
            {
                FtpWebRequest reqFTP, ftpsize;
                Stream ftpStream = null;
                FtpWebResponse response = null;
                FileStream outputStream = null;
                try
                {
    
                    outputStream = new FileStream(localFileName, FileMode.Append);
                    if (FtpServerIP == null || FtpServerIP.Trim().Length == 0)
                    {
                        throw new Exception("ftp下载目标服务器地址未设置!");
                    }
                    Uri uri = new Uri("ftp://" + FtpServerIP + "/" + remoteFileName);
                    ftpsize = (FtpWebRequest)FtpWebRequest.Create(uri);
                    ftpsize.UseBinary = true;
                    ftpsize.ContentOffset = size;
    
                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);
                    reqFTP.UseBinary = true;
                    reqFTP.KeepAlive = false;
                    reqFTP.ContentOffset = size;
                    if (ifCredential)//使用用户身份认证
                    {
                        ftpsize.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
                        reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
                    }
                    ftpsize.Method = WebRequestMethods.Ftp.GetFileSize;
                    FtpWebResponse re = (FtpWebResponse)ftpsize.GetResponse();
                    long totalBytes = re.ContentLength;
                    re.Close();
    
                    reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                    response = (FtpWebResponse)reqFTP.GetResponse();
                    ftpStream = response.GetResponseStream();
    
                    //更新进度  
                    if (updateProgress != null)
                    {
                        updateProgress((int)totalBytes, 0);//更新进度条   
                    }
                    long totalDownloadedByte = 0;
                    int bufferSize = 2048;
                    int readCount;
                    byte[] buffer = new byte[bufferSize];
                    readCount = ftpStream.Read(buffer, 0, bufferSize);
                    while (readCount > 0)
                    {
                        totalDownloadedByte = readCount + totalDownloadedByte;
                        outputStream.Write(buffer, 0, readCount);
                        //更新进度  
                        if (updateProgress != null)
                        {
                            updateProgress((int)totalBytes, (int)totalDownloadedByte);//更新进度条   
                        }
                        readCount = ftpStream.Read(buffer, 0, bufferSize);
                    }
                    ftpStream.Close();
                    outputStream.Close();
                    response.Close();
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                    throw;
                }
                finally
                {
                    if (ftpStream != null)
                    {
                        ftpStream.Close();
                    }
                    if (outputStream != null)
                    {
                        outputStream.Close();
                    }
                    if (response != null)
                    {
                        response.Close();
                    }
                }
            }
    
            /// <summary>
            /// 从FTP服务器下载文件,指定本地路径和本地文件名
            /// </summary>
            /// <param name="remoteFileName">远程文件名</param>
            /// <param name="localFileName">保存本地的文件名(包含路径)</param>
            /// <param name="ifCredential">是否启用身份验证(false:表示允许用户匿名下载)</param>
            /// <param name="updateProgress">报告进度的处理(第一个参数:总大小,第二个参数:当前进度)</param>
            /// <param name="brokenOpen">是否断点下载:true 会在localFileName 找是否存在已经下载的文件,并计算文件流大小</param>
            /// <returns>是否下载成功</returns>
            public static bool FtpDownload(string remoteFileName, string localFileName, bool ifCredential, bool brokenOpen, Action<int, int> updateProgress = null)
            {
                if (brokenOpen)
                {
                    try
                    {
                        long size = 0;
                        if (File.Exists(localFileName))
                        {
                            using (FileStream outputStream = new FileStream(localFileName, FileMode.Open))
                            {
                                size = outputStream.Length;
                            }
                        }
                        return FtpBrokenDownload(remoteFileName, localFileName, ifCredential, size, updateProgress);
                    }
                    catch
                    {
                        throw;
                    }
                }
                else
                {
                    return FtpDownload(remoteFileName, localFileName, ifCredential, updateProgress);
                }
            }
            #endregion
    
            #region 上传文件到FTP服务器
            /// <summary>
            /// 上传文件到FTP服务器
            /// </summary>
            /// <param name="localFullPath">本地带有完整路径的文件名</param>
            /// <param name="updateProgress">报告进度的处理(第一个参数:总大小,第二个参数:当前进度)</param>
            /// <returns>是否下载成功</returns>
            public static bool FtpUploadFile(string localFullPathName, Action<int, int> updateProgress = null)
            {
                FtpWebRequest reqFTP;
                Stream stream = null;
                FtpWebResponse response = null;
                FileStream fs = null;
                try
                {
                    FileInfo finfo = new FileInfo(localFullPathName);
                    if (FtpServerIP == null || FtpServerIP.Trim().Length == 0)
                    {
                        throw new Exception("ftp上传目标服务器地址未设置!");
                    }
                    Uri uri = new Uri("ftp://" + FtpServerIP + "/" + finfo.Name);
                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);
                    reqFTP.KeepAlive = false;
                    reqFTP.UseBinary = true;
                    reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);//用户,密码
                    reqFTP.Method = WebRequestMethods.Ftp.UploadFile;//向服务器发出下载请求命令
                    reqFTP.ContentLength = finfo.Length;//为request指定上传文件的大小
                    response = reqFTP.GetResponse() as FtpWebResponse;
                    reqFTP.ContentLength = finfo.Length;
                    int buffLength = 1024;
                    byte[] buff = new byte[buffLength];
                    int contentLen;
                    fs = finfo.OpenRead();
                    stream = reqFTP.GetRequestStream();
                    contentLen = fs.Read(buff, 0, buffLength);
                    int allbye = (int)finfo.Length;
                    //更新进度  
                    if (updateProgress != null)
                    {
                        updateProgress((int)allbye, 0);//更新进度条   
                    }
                    int startbye = 0;
                    while (contentLen != 0)
                    {
                        startbye = contentLen + startbye;
                        stream.Write(buff, 0, contentLen);
                        //更新进度  
                        if (updateProgress != null)
                        {
                            updateProgress((int)allbye, (int)startbye);//更新进度条   
                        }
                        contentLen = fs.Read(buff, 0, buffLength);
                    }
                    stream.Close();
                    fs.Close();
                    response.Close();
                    return true;
    
                }
                catch (Exception ex)
                {
                    return false;
                    throw;
                }
                finally
                {
                    if (fs != null)
                    {
                        fs.Close();
                    }
                    if (stream != null)
                    {
                        stream.Close();
                    }
                    if (response != null)
                    {
                        response.Close();
                    }
                }
            }
    
            /// <summary>
            /// 上传文件到FTP服务器(断点续传)
            /// </summary>
            /// <param name="localFullPath">本地文件全路径名称:C:UsersJianKunKingDesktopIronPython脚本测试工具</param>
            /// <param name="remoteFilepath">远程文件所在文件夹路径</param>
            /// <param name="updateProgress">报告进度的处理(第一个参数:总大小,第二个参数:当前进度)</param>
            /// <returns></returns>       
            public static bool FtpUploadBroken(string localFullPath, string remoteFilepath, Action<int, int> updateProgress = null)
            {
                if (remoteFilepath == null)
                {
                    remoteFilepath = "";
                }
                string newFileName = string.Empty;
                bool success = true;
                FileInfo fileInf = new FileInfo(localFullPath);
                long allbye = (long)fileInf.Length;
                if (fileInf.Name.IndexOf("#") == -1)
                {
                    newFileName = RemoveSpaces(fileInf.Name);
                }
                else
                {
                    newFileName = fileInf.Name.Replace("#", "");
                    newFileName = RemoveSpaces(newFileName);
                }
                long startfilesize = GetFileSize(newFileName, remoteFilepath);
                if (startfilesize >= allbye)
                {
                    return false;
                }
                long startbye = startfilesize;
                //更新进度  
                if (updateProgress != null)
                {
                    updateProgress((int)allbye, (int)startfilesize);//更新进度条   
                }
    
                string uri;
                if (remoteFilepath.Length == 0)
                {
                    uri = "ftp://" + FtpServerIP + "/" + newFileName;
                }
                else
                {
                    uri = "ftp://" + FtpServerIP + "/" + remoteFilepath + "/" + newFileName;
                }
                FtpWebRequest reqFTP;
                // 根据uri创建FtpWebRequest对象 
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                // ftp用户名和密码 
                reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
                // 默认为true,连接不会被关闭 
                // 在一个命令之后被执行 
                reqFTP.KeepAlive = false;
                // 指定执行什么命令 
                reqFTP.Method = WebRequestMethods.Ftp.AppendFile;
                // 指定数据传输类型 
                reqFTP.UseBinary = true;
                // 上传文件时通知服务器文件的大小 
                reqFTP.ContentLength = fileInf.Length;
                int buffLength = 2048;// 缓冲大小设置为2kb 
                byte[] buff = new byte[buffLength];
                // 打开一个文件流 (System.IO.FileStream) 去读上传的文件 
                FileStream fs = fileInf.OpenRead();
                Stream strm = null;
                try
                {
                    // 把上传的文件写入流 
                    strm = reqFTP.GetRequestStream();
                    // 每次读文件流的2kb   
                    fs.Seek(startfilesize, 0);
                    int contentLen = fs.Read(buff, 0, buffLength);
                    // 流内容没有结束 
                    while (contentLen != 0)
                    {
                        // 把内容从file stream 写入 upload stream 
                        strm.Write(buff, 0, contentLen);
                        contentLen = fs.Read(buff, 0, buffLength);
                        startbye += contentLen;
                        //更新进度  
                        if (updateProgress != null)
                        {
                            updateProgress((int)allbye, (int)startbye);//更新进度条   
                        }
                    }
                    // 关闭两个流 
                    strm.Close();
                    fs.Close();
                }
                catch
                {
                    success = false;
                    throw;
                }
                finally
                {
                    if (fs != null)
                    {
                        fs.Close();
                    }
                    if (strm != null)
                    {
                        strm.Close();
                    }
                }
                return success;
            }
    
            /// <summary>
            /// 去除空格
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            private static string RemoveSpaces(string str)
            {
                string a = "";
                CharEnumerator CEnumerator = str.GetEnumerator();
                while (CEnumerator.MoveNext())
                {
                    byte[] array = new byte[1];
                    array = System.Text.Encoding.ASCII.GetBytes(CEnumerator.Current.ToString());
                    int asciicode = (short)(array[0]);
                    if (asciicode != 32)
                    {
                        a += CEnumerator.Current.ToString();
                    }
                }
                string sdate = System.DateTime.Now.Year.ToString() + System.DateTime.Now.Month.ToString() + System.DateTime.Now.Day.ToString() + System.DateTime.Now.Hour.ToString()
                    + System.DateTime.Now.Minute.ToString() + System.DateTime.Now.Second.ToString() + System.DateTime.Now.Millisecond.ToString();
                return a.Split('.')[a.Split('.').Length - 2] + "." + a.Split('.')[a.Split('.').Length - 1];
            }
            /// <summary>
            /// 获取已上传文件大小
            /// </summary>
            /// <param name="filename">文件名称</param>
            /// <param name="path">服务器文件路径</param>
            /// <returns></returns>
            public static long GetFileSize(string filename, string remoteFilepath)
            {
                long filesize = 0;
                try
                {
                    FtpWebRequest reqFTP;
                    FileInfo fi = new FileInfo(filename);
                    string uri;
                    if (remoteFilepath.Length == 0)
                    {
                        uri = "ftp://" + FtpServerIP + "/" + fi.Name;
                    }
                    else
                    {
                        uri = "ftp://" + FtpServerIP + "/" + remoteFilepath + "/" + fi.Name;
                    }
                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);
                    reqFTP.KeepAlive = false;
                    reqFTP.UseBinary = true;
                    reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);//用户,密码
                    reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
                    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                    filesize = response.ContentLength;
                    return filesize;
                }
                catch
                {
                    return 0;
                }
            }
    
            //public void Connect(String path, string ftpUserID, string ftpPassword)//连接ftp
            //{
            //    // 根据uri创建FtpWebRequest对象
            //    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
            //    // 指定数据传输类型
            //    reqFTP.UseBinary = true;
            //    // ftp用户名和密码
            //    reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            //}
    
            #endregion
    
            #region 获取当前目录下明细
            /// <summary>
            /// 获取当前目录下明细(包含文件和文件夹)
            /// </summary>
            /// <returns></returns>
            public static 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(), Encoding.Default);
                    string line = reader.ReadLine();
    
                    while (line != null)
                    {
                        result.Append(line);
                        result.Append("
    ");
                        line = reader.ReadLine();
                    }
                    result.Remove(result.ToString().LastIndexOf("
    "), 1);
                    reader.Close();
                    response.Close();
                    return result.ToString().Split('
    ');
                }
                catch (Exception ex)
                {
                    downloadFiles = null;
                    throw ex;
                }
            }
    
            /// <summary>
            /// 获取当前目录下文件列表(仅文件)
            /// </summary>
            /// <returns></returns>
            public static 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(), Encoding.Default);
    
                    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("
    ");
                            }
                        }
                        else
                        {
                            result.Append(line);
                            result.Append("
    ");
                        }
                        line = reader.ReadLine();
                    }
                    result.Remove(result.ToString().LastIndexOf('
    '), 1);
                    reader.Close();
                    response.Close();
                    return result.ToString().Split('
    ');
                }
                catch (Exception ex)
                {
                    downloadFiles = null;
                    throw ex;
                }
            }
    
            /// <summary>
            /// 获取当前目录下所有的文件夹列表(仅文件夹)
            /// </summary>
            /// <returns></returns>
            public static string[] GetDirectoryList()
            {
                string[] drectory = GetFilesDetailList();
                string m = string.Empty;
                foreach (string str in drectory)
                {
                    int dirPos = str.IndexOf("<DIR>");
                    if (dirPos > 0)
                    {
                        /*判断 Windows 风格*/
                        m += str.Substring(dirPos + 5).Trim() + "
    ";
                    }
                    else if (str.Trim().Substring(0, 1).ToUpper() == "D")
                    {
                        /*判断 Unix 风格*/
                        string dir = str.Substring(54).Trim();
                        if (dir != "." && dir != "..")
                        {
                            m += dir + "
    ";
                        }
                    }
                }
    
                char[] n = new char[] { '
    ' };
                return m.Split(n);
            }
            #endregion
    
            #region 删除文件及文件夹
            /// <summary>
            /// 删除文件
            /// </summary>
            /// <param name="fileName"></param>
            public static bool 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();
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                    throw ex;
                }
            }
    
            /// <summary>
            /// 删除文件夹
            /// </summary>
            /// <param name="folderName"></param>
            public static void RemoveDirectory(string folderName)
            {
                try
                {
                    string uri = ftpURI + folderName;
                    FtpWebRequest reqFTP;
                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
    
                    reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
                    reqFTP.KeepAlive = false;
                    reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;
    
                    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 ex;
                }
            }
            #endregion
    
            #region 其他操作
            /// <summary>
            /// 获取指定文件大小
            /// </summary>
            /// <param name="filename"></param>
            /// <returns></returns>
            public static 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)
                {
                    throw ex;
                }
                return fileSize;
            }
    
            /// <summary>
            /// 判断当前目录下指定的子目录是否存在
            /// </summary>
            /// <param name="RemoteDirectoryName">指定的目录名</param>
            public bool DirectoryExist(string RemoteDirectoryName)
            {
                try
                {
                    string[] dirList = GetDirectoryList();
    
                    foreach (string str in dirList)
                    {
                        if (str.Trim() == RemoteDirectoryName.Trim())
                        {
                            return true;
                        }
                    }
                    return false;
                }
                catch
                {
                    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)
                {
                    throw ex;
                }
            }
    
            /// <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)
                {
                    throw ex;
                }
            }
    
            /// <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 + "/";
            } 
            #endregion
    
    
        }
    }
    FTPHelper
  • 相关阅读:
    更新增加一个门店ID字段的值
    测试成功,修改能运行代码--待优化
    奶粉运营,跑数据三个模板。
    子查询返回多条报错误
    分析跑数口径与表内在关系逻辑
    NAVICAT PREMIUM 初识
    长沙生活
    金蝶用户操作
    EXCEL对比重复数据
    处理链长期检查问题
  • 原文地址:https://www.cnblogs.com/Liyuting/p/7084718.html
Copyright © 2011-2022 走看看