FTPHelper

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace Demo.FTP
{
    public class FTPHelper
    {
        //string ftpRemotePath;

        //#region 变量属性
        / <summary>
        / Ftp服务器ip
        / </summary>
        //public static string FtpServerIP = "www.shargeebar.cc";
        / <summary>
        / Ftp 指定用户名
        / </summary>
        //public static string FtpUserID = "store_ftp";
        / <summary>
        / Ftp 指定用户密码
        / </summary>
        //public static string FtpPassword = "7220180";

        //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
        //    {
        //        Console.WriteLine("fuck");
        //        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:\Users\JianKunKing\Desktop\IronPython脚本测试工具</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("\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;
        //        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("\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;
        //        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() + "\n";
        //        }
        //        else if (str.Trim().Substring(0, 1).ToUpper() == "D")
        //        {
        //            /*判断 Unix 风格*/
        //            string dir = str.Substring(54).Trim();
        //            if (dir != "." && dir != "..")
        //            {
        //                m += dir + "\n";
        //            }
        //        }
        //    }

        //    char[] n = new char[] { '\n' };
        //    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


        string ftpServerIP;
        string ftpRemotePath;
        string ftpUserID;
        string ftpPassword;
        string ftpURI;

        /// <summary>
        /// 连接FTP
        /// </summary>
        /// <param name="FtpServerIP">FTP连接地址</param>
        /// <param name="FtpRemotePath">指定FTP连接成功后的当前目录, 如果不指定即默认为根目录</param>
        /// <param name="FtpUserID">用户名</param>
        /// <param name="FtpPassword">密码</param>
        public FTPHelper(string FtpUserID, string FtpPassword)
        {
            ftpUserID = FtpUserID;
            ftpPassword = FtpPassword;
            ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
        }

        /// <summary>
        /// 下载
        /// </summary>
        /// <param name="filePath">文件保存路径</param>
        /// <param name="url">ftp路径</param>
        public void Download(string filePath, string url)
        {
            FtpWebRequest reqFTP;
            try
            {
                //string[] sArray =new  

                string path = filePath + "\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".png";
                Console.WriteLine(path);
                FileStream outputStream = new FileStream(path, FileMode.Create);
                
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                //reqFTP.
                reqFTP.UseBinary = true;
                reqFTP.UsePassive = true;
                reqFTP.KeepAlive = false;
                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();

                try
                {
                    Process p = new Process();
                    p.StartInfo.FileName = path;//设置进程名字
                                                //p.StartInfo.CreateNoWindow = true;
                    p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
                    p.Start();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("打开二维码图片错误:" + ex);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("FtpHelper Download Error --> " + ex.Message);
            }
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值