c#通过ftp下载文件

来源:互联网 发布:软件实施工资怎么样 编辑:程序博客网 时间:2024/06/05 07:10

c#通过ftp下载文件,借用了两位大神的代码 
http://www.cnblogs.com/rond/archive/2012/07/30/2611295.html

http://blog.csdn.net/csethcrm/article/details/8139744

感谢 
在这做下记录

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;//ftp类using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.IO;using System.Threading;using FtpSyn;namespace FtpSyn{     public class FtpHelper    {        //基本设置        static private string path = @"ftp://" + "192.168.1.103" + "/";    //目标路径        static private string ftpip = "192.168.1.103";    //ftp IP地址        static private string username = "root";   //ftp用户名        static private string password = "";   //ftp密码        //获取ftp上面的文件和文件夹        public static string[] GetFileList(string 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("\n");                    Console.WriteLine(line);                    line = reader.ReadLine();                }                // to remove the trailing '\n'                result.Remove(result.ToString().LastIndexOf('\n'), 1);                reader.Close();                response.Close();                return result.ToString().Split('\n');            }            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));                            //设置连接到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="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;        }        //从ftp服务器上下载文件的功能          public void Download( string fileName)        {            FtpWebRequest reqFTP;            try            {                string filePath = Application.StartupPath;                FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path + fileName));                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;                reqFTP.UseBinary = true;                reqFTP.Credentials = new NetworkCredential(username, password);                reqFTP.UsePassive = false;                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();                Stream ftpStream = response.GetResponseStream();                long cl = response.ContentLength;                int bufferSize = 2048;                int readCount;                byte[] buffer = new byte[bufferSize];                readCount = ftpStream.Read(buffer, 0, bufferSize);                while (readCount > 0)                {                    outputStream.Write(buffer, 0, readCount);                    readCount = ftpStream.Read(buffer, 0, bufferSize);                }                ftpStream.Close();                outputStream.Close();                response.Close();            }            catch (Exception ex)            {                throw ex;            }        }      }}namespace WindowsFormsApplication1{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private void button1_Click(object sender, EventArgs e)        {            FtpHelper m_ftp=new FtpHelper();            string[] list = FtpHelper.GetFileList("/");            m_ftp.Download("monitor_config.xml");        }    }}
原创粉丝点击