c#ftp下载上传

原创 2018年04月17日 20:54:53

做了一个winform小工具,先说下几个要注意的要点。

下载时: reqFtp.Method = WebRequestMethods.Ftp.DownloadFile;//下载

//uploadfile//上传

     ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;//获取目录,根据url定义是文件目录还是文件夹目录

这个是重中之重

这个属性设置了是要上传、下载、还是获取文件名、文件夹名。

然后是url要好好设置,/ \不要混用,我的选择是在电脑上就用反的\,连接网络就用正的/。

这个经常混,不过好像C#并不严格。

然后是账户密码,匿名就用     private static string FTPUSERNAME = "anonymous";//FTP服务器的用户名

        private static string FTPPASSWORD = "123";//FTP服务器的密码

最后是这个从流里面读取数据,这个可以连接进度条,相当麻烦,我也晕晕的。直接用的库函数。




首先是变量,每个一定要有含义

     private static string path = "ftp://10.12.12.9:21";//FTP的服务器地址,格式为ftp://192.168.1.234:8021/。ip地址和端口换成自己的,这些建议写在配置文件中,方便修改
        private static string FTPUSERNAME = "anonymous";//FTP服务器的用户名
        private static string FTPPASSWORD = "123";//FTP服务器的密码
        private static string LPath = @"D:\";
        string[] SFiles = new string[15];
        private string SelectDir = "";//选择的文件夹的名字
然后
//===================================================
        /// <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("我的电脑\\", "");//无用 
                ftpfilepath = ftpfilepath.Replace("\\", "/");//无用
                string newFileName = filePath + ftpfilename;//给原名字
                if (File.Exists(newFileName))
                {
                    try
                    {
                        File.Delete(newFileName);//如果已有则删除已有
                    }
                    catch { }
                }
                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>
        /// <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(FTPUSERNAME, FTPPASSWORD);
                            //设置请求完成后是否保持连接
                            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);
                                }
                              MessageBox .Show ("上传文件成功");
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                    finally
                    {

                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {

                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

C# FTP 上传 下载(汇总)

1、C# 上传下载ftp(支持断点续传)2、 C# FTP上传下载(支持断点续传)
  • xunzaosiyecao
  • xunzaosiyecao
  • 2015-11-25 19:03:22
  • 4415

FTP上传下载源代码 整个项目解决方案 C#编写

  • 2010年09月10日 15:58
  • 166KB
  • 下载

C# FTP上传及进度条的实现

  • 2010年04月02日 23:52
  • 836KB
  • 下载

【C#工具类】FTP--自定义FTPFactory(上传下载)

工具类:FTPFactory:提供了FTP连接和上传下载等一些了apipublic class FtpFactory { private string ftpServerIP;...
  • f627422467
  • f627422467
  • 2016-11-07 10:25:06
  • 490

C# FTP上传下载(支持断点续传)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N...
  • xunzaosiyecao
  • xunzaosiyecao
  • 2015-11-24 21:45:28
  • 14417

C#实现FTP上传下载

Wqi
  • kangkanglou
  • kangkanglou
  • 2014-06-14 09:56:06
  • 13743

基于C#的FTP上传Demo

  • 2017年12月15日 14:38
  • 48KB
  • 下载

C#FTP上传和下载

// /// FTP下载文件 /// /// 存储路径 /// 文件相对于FTP服务器的路径 /// 要下载的文件的...
  • hutao1101175783
  • hutao1101175783
  • 2013-07-17 16:45:59
  • 756

C#FTP方式文件上传远程服务器

public class FtpWeb  {      string ftpRemotePath;      string ftpUserID;      string ftpPassword;   ...
  • yuanchu88
  • yuanchu88
  • 2017-03-01 23:34:47
  • 554

c#版FTP自动上传工具源码

  • 2015年10月30日 08:56
  • 324KB
  • 下载
收藏助手
不良信息举报
您举报文章:c#ftp下载上传
举报原因:
原因补充:

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