C#winform 从ftp下载文件、获取文件(夹)的名字

原创 2018年04月16日 15:24:36

直接用地址下载,引用进度条:

        /// <summary>
        /// 从ftp服务器下载文件的功能----带进度条
        /// </summary>
        /// <param name="ftpfilepath">ftp下载的地址</param>
        /// <param name="filePath">保存本地的地址</param>
        /// <param name="ftpfilename">要下载的文件名</param>  
        /// <param name="pb">进度条引用</param>
        /// <returns></returns>
        public static bool Download1(string ftpfilepath, string filePath, string ftpfilename, ProgressBar pb)
        {
            FtpWebRequest reqFtp = null;
            FtpWebResponse response = null;
            Stream ftpStream = null;
            FileStream outputStream = null;
            try
            {
                filePath = filePath.Replace("我的电脑\\", "");//无用
               // String onlyFileName = Path.GetFileName(ftpfilepath);//Path.GetFileName('C:\mydir\myfile.ext')
                                                                 // returns 'myfile.ext'
                string newFileName = filePath + ftpfilename;//给原名字
                if (File.Exists(newFileName))
                {
                    try
                    {
                        File.Delete(newFileName);//如果已有则删除已有
                    }
                    catch { }

                }
                ftpfilepath = ftpfilepath.Replace("\\", "/");//无用
                string url = path + "/"+ ftpfilepath +"/" + ftpfilename;//("ftp://10.12.12.9/iTap3.x/iTapAutoSettle3.x_1240.zip
                //URL是URI的子集,统一资源标志符URI就是在某一规则下能把一个资源独一无二地标识出来。统一资源定位符URL就是用定位的方式实现的URI。
                //URI可被视为定位符(URL),名称(URN)或两者兼备。统一资源名(URN)如同一个人的名称,而统一资源定位符(URL)代表一个人的住址。
                //换言之,URN定义某事物的身份,而URL提供查找该事物的方法。
                reqFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));//创造连接,创建一个FtpWebRequest对象,指向ftp服务器的uri
                reqFtp.UseBinary = true;//二进制传输,给FtpWebRequest对象设置属性
                reqFtp.Method = WebRequestMethods.Ftp.DownloadFile;// 设置ftp的执行方法(上传,下载等)

                reqFtp.Credentials = new NetworkCredential(FTPUSERNAME, FTPPASSWORD);//账户密码
                response = (FtpWebResponse)reqFtp.GetResponse();//获得文件,执行请求
                ftpStream = response.GetResponseStream();//获得流,接收相应流
                long cl = GetFileSize(url);//获得文件大小cl
                int bufferSize = 2048;//时间延迟
                int readCount;
                byte[] buffer = new byte[bufferSize];
                readCount = ftpStream.Read(buffer, 0, bufferSize);//从流里读取的字节数为0时,则下载结束。
                outputStream = new FileStream(newFileName, FileMode.Create);//输出流

                float percent = 0;
                while (readCount > 0)
                {
                    outputStream.Write(buffer, 0, readCount);//写入
                    readCount = ftpStream.Read(buffer, 0, bufferSize);//写入
                    percent = (float)outputStream.Length / (float)cl * 100;//百分之多少了
                    if (percent <= 100)
                    {
                        if (pb != null)
                        {
                            pb.Invoke(new updateui(upui), new object[] { cl, (int)percent, pb });//进度条
                        }
                    }

                }
                
                return true;
            }
            catch (Exception ex)//捕捉
            {
                throw ex;
            }
            finally//异常清理,无论是否异常,都会执行
            {
                if (reqFtp != null)
                {
                    reqFtp.Abort();
                }
                if (response != null)
                {
                    response.Close();
                }
                if (ftpStream != null)
                {
                    ftpStream.Close();
                }
                if (outputStream != null)
                {
                    outputStream.Close();
                }
            }
        }
        public static void upui(long rowCount, int i, ProgressBar PB)//进度条
        {
            try
            {
                PB.Value = i;
            }
            catch { }
        }

        #region 获得文件的大小
        /// <summary>
        /// 获得文件大小
        /// </summary>
        /// <param name="url">FTP文件的完全路径</param>
        /// <returns></returns>
        public static long GetFileSize(string url)//获取大小就要重新连接吗?是的,method只能有一个
        {

            long fileSize = 0;
            try
            {
                FtpWebRequest reqFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));//路径创造新的连接
                reqFtp.UseBinary = true;
                reqFtp.Credentials = new NetworkCredential(FTPUSERNAME, FTPPASSWORD);//连接
                reqFtp.Method = WebRequestMethods.Ftp.GetFileSize;//方法大小
                FtpWebResponse response = (FtpWebResponse)reqFtp.GetResponse();
                fileSize = response.ContentLength;//获得大小

                response.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return fileSize;
        }
        #endregion

直接全贴上来好了

        //===================================================
       

        /// <summary>
        /// 获取当前目录下文件夹
        /// </summary>
        /// <returns></returns>
        public string[] GetFilesDirList()
        {
           
           // string[] downloadFiles;
            try
            {
                StringBuilder result = new StringBuilder();//如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。
                FtpWebRequest ftp;
                ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));//"ftp://10.12.12.9";
                ftp.Credentials = new NetworkCredential(FTPUSERNAME, FTPPASSWORD);
                ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;//目录
                WebResponse response = ftp.GetResponse();//response为一个ftp的WebResponse
                StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);//读入responses所创建的数据流
                string line = reader.ReadLine();//输入流中的下一行;如果到达了输入流的末尾,则为空引用
                while (line != null)
                {
                    result.Append(line);//)Append 方法可用来将文本或对象的字符串表示形式添加到由当前 StringBuilder 对象表示的字符串的结尾处。
                    result.Append("\n");
                    line = reader.ReadLine();
                    textBox1.Text = line; 
                }
                result.Remove(result.ToString().LastIndexOf("\n"), 1);//移除最后的换行》?
                reader.Close();
                response.Close();
                return result.ToString().Split('\n');
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        //===================================================
        /// <summary>
        /// 获取选中文件夹下的文件
        /// </summary>
        /// <returns></returns>
        public string[] GetFilesList()//
        {
           
       
            string url = path +"/"+ SelectDir ;//============和之前的文件夹唯一的不同就在于此,加上了文件夹的名字..我会优化的
            try
            {
                StringBuilder result = new StringBuilder();//如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。
                FtpWebRequest ftp;
                ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));
                ftp.Credentials = new NetworkCredential(FTPUSERNAME, FTPPASSWORD);
                ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;//目录
                WebResponse response = ftp.GetResponse();
                StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);//读入responses所创建的数据流
                string line = reader.ReadLine();//输入流中的下一行;如果到达了输入流的末尾,则为空引用
                while (line != null)
                {
                    result.Append(line);//)Append 方法可用来将文本或对象的字符串表示形式添加到由当前 StringBuilder 对象表示的字符串的结尾处。
                    result.Append("\n");
                    line = reader.ReadLine();
                    textBox1.Text = line;
                }
                result.Remove(result.ToString().LastIndexOf("\n"), 1);//移除最后的换行》?
                reader.Close();
                response.Close();
                return result.ToString().Split('\n');
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        //===================================================
        /// <summary>
        ///事实上
        /// </summary>
        private void button2_Click(object sender, EventArgs e)//显示列表、刷新
        {
            listBox1.Items.Clear();
            try
            {
                string[] AllDirs = GetFilesDirList();
                for (int i = 0; i < AllDirs.Length; i++) { //将所有的数组(文件夹名字、信息)给到列表里
                listBox1.Items.Add(AllDirs[i]);
        
            }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //===================================================显示文件

             
        private void button3_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            string[] AllFiles = GetFilesList();
            int Len = AllFiles.Length;
//            string[] comp = new string[Len];
//            comp = AllFiles.OrderBy(s => int.Parse(Regex.Match(s, @"\d+").Value)).ToArray();
////
            for (int i = 0; i < Len; i++)
            { //将所有的数组(文件夹名字、信息)给到列表里
                listBox1.Items.Add(AllFiles[i]);
//
           }
        }
        //===================================================
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            String StrTemp = listBox1.SelectedItem.ToString();

            // String[] StrConvert = StrTemp.Split('>');//获得文件夹的名字
            //  StrTemp = StrConvert[1];
            // StrTemp = StrTemp.Trim();//删除空格
            // SelectDir = StrTemp;//名字给SelectDir
            // textBox1.Text = StrTemp;//吧文件夹名字显示

            StrTemp = StrTemp.Substring(39);//文件前面有39个奇怪的字符...无论文件与文件夹
            SelectDir = StrTemp;//名字给SelectDir
            textBox1.Text = StrTemp;//吧文件夹名字显示

        }

定时任务,定时下载FTP指定文件

FTP下载类: package com.log.generateXML.util;> import java.io.BufferedOutputStream; import java.io.Fil...
  • ptzrbin
  • ptzrbin
  • 2014-01-23 14:44:31
  • 5024

java读取FTP文件下载到本地

最近公司业务需要,研究了一下ftp的功能,发现还是比较实用的。ftp相当于是自己建一个网盘,然后创建用户,为用户提供上传下载功能。特别是多平台得数据交互,优势还是蛮大的。有兴趣的可以研究一下,限于篇幅...
  • cainiao35
  • cainiao35
  • 2017-03-24 11:15:45
  • 11053

从Ftp服务器定时下载文件 并对文件解析

  • 2013年11月21日 15:08
  • 8.05MB
  • 下载

C# 从FTP服务器下载文件到本地

static void Main(string[] args) { //ftp服务器路径 string ftpServer = S...
  • whilelie
  • whilelie
  • 2012-08-07 17:39:34
  • 3771

ftp命令从服务器上下载文件

1、首先cmd,进入Dos窗口。 2、输入ftp,回车 3、"open 服务器地址".点击回车键.会提示你输入用户名和密码,输入ftp服务器用户名和密码 4、输入"lcd...
  • polo_longsan
  • polo_longsan
  • 2015-08-19 11:18:40
  • 1542

python通过FTP方式从虚拟机服务器上下载文件

因业务需求,需要将几台虚拟机服务器上的特定文件夹下的日志集中到一台服务器上,参考前人工作直接写python脚本,先上代码:#!/usr/bin/python # -*- coding:utf-8 -*...
  • u010695420
  • u010695420
  • 2017-07-05 11:42:20
  • 641

3怎样从FTP服务器上下载文件

怎样从FTP服务器上下载文件用IE:打开浏览器IE → 在地址栏内输入:ftp://× × × .× × × .× × × .× × 回车(ftp地址或ftp域名) → 输入用户名和密码 → 按“确定...
  • huangbin0115
  • huangbin0115
  • 2007-07-02 12:16:00
  • 2754

java 远程从FTP服务器下载文件到本地

package com.cassiatwig.liuliangqianbao.util; import org.apache.commons.net.ftp.FTPClient;  imp...
  • yyongsheng
  • yyongsheng
  • 2017-06-21 10:40:45
  • 3266

c#通过ftp下载文件

c#通过ftp下载文件,借用了两位大神的代码 http://www.cnblogs.com/rond/archive/2012/07/30/2611295.htmlhttp://blog.csdn....
  • look1259
  • look1259
  • 2015-07-29 10:55:59
  • 6023

SSIS 学习之旅 FTP文件传输-脚本任务

这一章主要讲解一下通过脚本任务怎么把CSV文件抛送到FTP服务器上 控件的使用这里就不做详细讲解了。大家如果有不懂得可以看下我之前的文章。 第一章:SSIS 学习之旅 第一个SSIS 示例(一) ...
  • u013054786
  • u013054786
  • 2016-05-14 21:30:10
  • 1306
收藏助手
不良信息举报
您举报文章:C#winform 从ftp下载文件、获取文件(夹)的名字
举报原因:
原因补充:

(最多只允许输入30个字)