zoukankan      html  css  js  c++  java
  • FTP创建与操作

    1,FTP服务创建于配置http://jingyan.baidu.com/article/0a52e3f4230067bf63ed7268.html,

    2,FTP操作类

    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Windows.Forms;
    
    namespace FTP
    {
        //使用时需要建立配置文件在配置文件里面写链接信息,
         public class FtpHelper
        {
            //基本设置
            public static string path = @"ftp://" + FtpHelper.GetAppConfig("path") + "/"; //目标路径
            public static string ftpip = FtpHelper.GetAppConfig("path");    //ftp IP地址
            static private string username = FtpHelper.GetAppConfig("username");   //ftp用户名
            static private string password = FtpHelper.GetAppConfig("password");   //ftp密码
            public static string GetAppConfig(string strKey)
            {
                foreach (string key in ConfigurationManager.AppSettings)
                {
                    if (key == strKey)
                    {
                        string str = ConfigurationManager.AppSettings[strKey];
                        return ConfigurationManager.AppSettings[strKey];
                    }
                }
                return null;
            }
            public static string[] GetFileList()//已验证
            {
                //dir = dir + "/";//加斜线与不加斜线的区别是路径和文件名
                string[] downloadFiles;
                StringBuilder result = new StringBuilder();
                FtpWebRequest request;
                try
                {
                    request = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
                    request.UseBinary = true;
                    request.Credentials = new NetworkCredential(username, password);//设置用户名和密码
                    request.Method = WebRequestMethods.Ftp.ListDirectory;
                    request.UseBinary = true;
    
                    WebResponse response = request.GetResponse();
                    StreamReader reader = new StreamReader(response.GetResponseStream());
    
                    string line = reader.ReadLine();
                    while (line != null)
                    {
                        result.Append(line);
                        result.Append("
    ");
                        Console.WriteLine(line);
                        line = reader.ReadLine();
                    }
                    // to remove the trailing '
    '
                    result.Remove(result.ToString().LastIndexOf('
    '), 1);
                    reader.Close();
                    response.Close();
                    return result.ToString().Split('
    ');
                }
                catch (Exception ex)
                {
                    Console.WriteLine("获取ftp上面的文件和文件夹:" + ex.Message);
                    downloadFiles = null;
                    return downloadFiles;
                }
            }
    
            /// <summary>
            /// 获取文件大小
            /// </summary>
            /// <param name="file">ip服务器下的相对路径</param>
            /// <returns>文件大小</returns>
            public static int GetFileSize(string file)//已验证
            {
                StringBuilder result = new StringBuilder();
                FtpWebRequest request;
                try
                {
                    request = (FtpWebRequest)FtpWebRequest.Create(new Uri(path + file));
                    request.UseBinary = true;
                    request.Credentials = new NetworkCredential(username, password);//设置用户名和密码
                    request.Method = WebRequestMethods.Ftp.GetFileSize;
    
                    int dataLength = (int)request.GetResponse().ContentLength;
    
                    return dataLength;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("获取文件大小出错:" + ex.Message);
                    return -1;
                }
            }
    
            /// <summary>
            /// 文件上传
            /// </summary>
            /// <param name="filePath">原路径(绝对路径)包括文件名</param>
            /// <param name="objPath">目标文件夹:服务器下的相对路径 不填为根目录</param>
            public static void FileUpLoad(string filePath, string objPath = "")
            {
                try
                {
                    string url = path;
                    if (objPath != "")
                        url += objPath + "/";
                    try
                    {
    
                        FtpWebRequest reqFTP = null;
                        //待上传的文件 (全路径)
                        try
                        {
                            FileInfo fileInfo = new FileInfo(filePath);
                            using (FileStream fs = fileInfo.OpenRead())
                            {
                                long length = fs.Length;
                                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url + fileInfo.Name[0]));
    
                                //设置连接到FTP的帐号密码
                                reqFTP.Credentials = new NetworkCredential(username, password);
                                //设置请求完成后是否保持连接
                                reqFTP.KeepAlive = false;
                                //指定执行命令
                                reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
                                //指定数据传输类型
                                reqFTP.UseBinary = true;
    
                                using (Stream stream = reqFTP.GetRequestStream())
                                {
                                    //设置缓冲大小
                                    int BufferLength = 5120;
                                    byte[] b = new byte[BufferLength];
                                    int i;
                                    while ((i = fs.Read(b, 0, BufferLength)) > 0)
                                    {
                                        stream.Write(b, 0, i);
                                    }
                                    Console.WriteLine("上传文件成功");
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("上传文件失败错误为" + ex.Message);
                        }
                        finally
                        {
    
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("上传文件失败错误为" + ex.Message);
                    }
                    finally
                    {
    
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("上传文件失败错误为" + ex.Message);
                }
            }
          
    
            /// <summary>
            /// 删除文件
            /// </summary>
            /// <param name="fileName">服务器下的相对路径 包括文件名</param>
            public static void DeleteFileName(string fileName)//已验证
            {
                try
                {
                    FileInfo fileInf = new FileInfo(ftpip + "" + fileName);
                    string uri = path + fileName;
                    FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                    // 指定数据传输类型
                    reqFTP.UseBinary = true;
                    // ftp用户名和密码
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    // 默认为true,连接不会被关闭
                    // 在一个命令之后被执行
                    reqFTP.KeepAlive = false;
                    // 指定执行什么命令
                    reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
                    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                    response.Close();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("删除文件出错:" + ex.Message);
                }
            }
            /// <summary>
            /// 删除文件
            /// </summary>
            /// <param name="fileName"></param>
            public static void Delete(string fileName)//已验证
            {
                try
                {
                    string uri = path + fileName;
                    FtpWebRequest reqFTP;
                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
    
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    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)
                {
                    //Insert_Standard_ErrorLog.Insert("FtpWeb", "Delete Error --> " + ex.Message + "  文件名:" + fileName);
                }
            }
            /// <summary>
            /// 删除文件夹
            /// </summary>
            /// <param name="folderName"></param>
            public static void RemoveDirectory(string folderName)//已验证
            {
                try
                {
                    string uri = path + folderName;
                    FtpWebRequest reqFTP;
                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
    
                    reqFTP.Credentials = new NetworkCredential(username,password);
                    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)
                {
                    //Insert_Standard_ErrorLog.Insert("FtpWeb", "Delete Error --> " + ex.Message + "  文件名:" + folderName);
                }
            }
            /// <summary>
            /// 获取当前目录下明细(包含文件和文件夹)
            /// </summary>
            /// <returns></returns>
            public static string[] GetFilesDetailList(string dir)
            {
                string[] downloadFiles;
                try
                {
                    dir = dir + "/";
                    StringBuilder result = new StringBuilder();
                    FtpWebRequest ftp;
                    ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(path+dir));
                    ftp.Credentials = new NetworkCredential(username, password);
                    ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                    WebResponse response = ftp.GetResponse();
                    StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
    
                    //while (reader.Read() > 0)
                    //{
    
                    //}
                    string line = reader.ReadLine();
                    //line = reader.ReadLine();
                    //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;
                    //Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFilesDetailList Error --> " + ex.Message);
                    return downloadFiles;
                }
            }
            public static string[] GetFilesDetailList()
            {
                string[] downloadFiles;
                try
                {
                   
                    StringBuilder result = new StringBuilder();
                    FtpWebRequest ftp;
                    ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
                    ftp.Credentials = new NetworkCredential(username, password);
                    ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                    WebResponse response = ftp.GetResponse();
                    StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
    
                    //while (reader.Read() > 0)
                    //{
    
                    //}
                    string line = reader.ReadLine();
                    //line = reader.ReadLine();
                    //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;
                    //Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFilesDetailList Error --> " + ex.Message);
                    return downloadFiles;
                }
            }
            public static void Upload()//已验证
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                openFileDialog.Title = "选择文件";
                openFileDialog.Filter = "所有文件|*.*|rar文件|*.rar|文本文件|*.txt";
                openFileDialog.FileName = string.Empty;
                openFileDialog.FilterIndex = 1;
                openFileDialog.RestoreDirectory = true;
                openFileDialog.DefaultExt = "txt";
                DialogResult result = openFileDialog.ShowDialog();
                if (result == DialogResult.Cancel)
                {
                    return;
                }
                string fileName = openFileDialog.FileName;
                FileInfo fileInf = new FileInfo(fileName);
                string uri = path + fileInf.Name;
                FtpWebRequest reqFTP;
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                reqFTP.Credentials = new NetworkCredential(username, password);
                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)
                {
                    //Insert_Standard_ErrorLog.Insert("FtpWeb", "Upload Error --> " + ex.Message);
                }
            }
            public static void Download(string fileName)//已验证
            {
    
                SaveFileDialog saveFileDialog = new SaveFileDialog();
                saveFileDialog.FileName = fileName;
                saveFileDialog.Filter = "所有文件(*.*)|(*.*)";
                if (saveFileDialog.ShowDialog() != DialogResult.OK)
                {
                    return;
                }
    
                string filePath = saveFileDialog.FileName;
                FtpWebRequest reqFTP;
                try
                {
                    FileStream outputStream = new FileStream(filePath, FileMode.Create);
    
                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path + fileName));
                    reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                    reqFTP.UseBinary = true;
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    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)
                {
                    //Insert_Standard_ErrorLog.Insert("FtpWeb", "Download Error --> " + ex.Message);
                }
            }
            /// <summary>
            /// 新建目录 上一级必须先存在
            /// </summary>
            /// <param name="dirName">服务器下的相对路径</param>
            public static void MakeDir(string dirName)//已验证
            {
                try
                {
                    string uri = path + dirName;
                    FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                    // 指定数据传输类型
                    reqFTP.UseBinary = true;
                    // ftp用户名和密码
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
                    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                    response.Close();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("创建目录出错:" + ex.Message);
                }
            }
    
            /// <summary>
            /// 删除目录 上一级必须先存在
            /// </summary>
            /// <param name="dirName">服务器下的相对路径</param>
            public static void DelDir(string dirName)//已验证
            {
                try
                {
                    string uri = path + dirName;
                    FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                    // ftp用户名和密码
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;
                    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                    response.Close();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("删除目录出错:" + ex.Message);
                }
            }
    
            /// <summary>
            /// 从ftp服务器上获得文件夹列表
            /// </summary>
            /// <param name="RequedstPath">服务器下的相对路径</param>
            /// <returns></returns>
            public static List<string> GetDirctory(string RequedstPath)//已验证
            {
                List<string> strs = new List<string>();
                try
                {
                    string uri = path + RequedstPath;   //目标路径 path为服务器地址
                    FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                    // ftp用户名和密码
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                    WebResponse response = reqFTP.GetResponse();
                    StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名
    
                    string line = reader.ReadLine();
                    while (line != null)
                    {
                        if (line.Contains("<DIR>"))
                        {
                            string msg = line.Substring(line.LastIndexOf("<DIR>") + 5).Trim();
                            strs.Add(msg);
                        }
                        line = reader.ReadLine();
                    }
                    reader.Close();
                    response.Close();
                    return strs;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("获取目录出错:" + ex.Message);
                }
                return strs;
            }
    
            /// <summary>
            /// 从ftp服务器上获得文件列表
            /// </summary>
            /// <param name="RequedstPath">服务器下的相对路径</param>
            /// <returns></returns>
            public static List<string> GetFile(string RequedstPath)//已验证
            {
                List<string> strs = new List<string>();
                try
                {
                    string uri = path + RequedstPath;   //目标路径 path为服务器地址
                    FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                    // ftp用户名和密码
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                    WebResponse response = reqFTP.GetResponse();
                    StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名
    
                    string line = reader.ReadLine();
                    while (line != null)
                    {
                        if (!line.Contains("<DIR>"))
                        {
                            string msg = line.Substring(39).Trim();
                            strs.Add(msg);
                        }
                        line = reader.ReadLine();
                    }
                    reader.Close();
                    response.Close();
                    return strs;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("获取文件出错:" + ex.Message);
                }
                return strs;
            }
            /// <summary>
            /// 获取当前目录下文件列表(仅文件)
            /// </summary>
            /// <returns></returns>
            public static string[] GetFileList1(string mask)
            {
                string[] downloadFiles;
                StringBuilder result = new StringBuilder();
                FtpWebRequest reqFTP;
                try
                {
                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
                    reqFTP.UseBinary = true;
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    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;
                    if (ex.Message.Trim() != "远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。")
                    {
                        //Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFileList Error --> " + ex.Message.ToString());
                    }
                    return downloadFiles;
                }
            }
    
            /// <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);
            }
    
            /// <summary>
            /// 判断当前目录下指定的子目录是否存在
            /// </summary>
            /// <param name="RemoteDirectoryName">指定的目录名</param>
            public static 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 static bool FileExist(string RemoteFileName)
            {
                string[] fileList = GetFileList1("*.*");
                foreach (string str in fileList)
                {
                    if (str.Trim() == RemoteFileName.Trim())
                    {
                        return true;
                    }
                }
                return false;
            }
            /// <summary>
            /// 改名
            /// </summary>
            public static void ReName(string currentFilename, string newFilename)//已验证
            {
                FtpWebRequest reqFTP;
                try
                {
                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path + currentFilename));
                    string type = Path.GetExtension(currentFilename);//获取文件扩展名
                    reqFTP.Method = WebRequestMethods.Ftp.Rename;
                    reqFTP.RenameTo = newFilename+type;
                    reqFTP.UseBinary = true;
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                    Stream ftpStream = response.GetResponseStream();
    
                    ftpStream.Close();
                    response.Close();
                }
                catch (Exception ex)
                {
                    //Insert_Standard_ErrorLog.Insert("FtpWeb", "ReName Error --> " + ex.Message);
                }
            }
    
            /// <summary>
            /// 移动文件
            /// </summary>
            /// <param name="currentFilename"></param>
            /// <param name="newFilename"></param>
            public static void MovieFile(string currentFilename, string newDirectory)
            {
                ReName(currentFilename, newDirectory);
            }
            public static string FileOrDirectory(string path)
            {
                if (File.Exists(path))
                {
                    return "文件";
                }
                else if (Directory.Exists(path))
                {
                    return "文件夹";
                }
                else
                {
                    return "错误";
                }
            }
        }
    }
    

      

  • 相关阅读:
    Codechef EDGEST 树套树 树状数组 线段树 LCA 卡常
    BZOJ4319 cerc2008 Suffix reconstruction 字符串 SA
    Codechef STMINCUT S-T Mincut (CodeChef May Challenge 2018) kruskal
    Codeforces 316G3 Good Substrings 字符串 SAM
    Codechef CHSIGN Change the Signs(May Challenge 2018) 动态规划
    BZOJ1396 识别子串 字符串 SAM 线段树
    CodeForces 516C Drazil and Park 线段树
    CodeForces 516B Drazil and Tiles 其他
    CodeForces 516A Drazil and Factorial 动态规划
    SPOJ LCS2
  • 原文地址:https://www.cnblogs.com/wangboke/p/5395982.html
Copyright © 2011-2022 走看看