FTP服务器搭建及C#实现FTP文件操作

FTP服务器搭建及C#实现FTP文件操作

1、搭建FTP服务器(以win10为例)

FTP服务器搭建及C#实现FTP文件操作_c# ftp-CSDN博客

2、代码

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

namespace Hk.SaaCore.Model
{
    public class FtpHelper
    {
        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 FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword)
        {
            ftpServerIP = FtpServerIP;
            ftpRemotePath = FtpRemotePath;
            ftpUserID = FtpUserID;
            ftpPassword = FtpPassword;
            ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
        }


        /// <summary>
        /// 下载
        /// </summary>
        /// <param name="filePath">下载保存的文件夹路径</param>
        /// <param name="fileName">文件名称</param>
        public bool Download(string filePath, string fileName)
        {
            try
            {
                FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
                FtpWebRequest reqFTP;
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                reqFTP.UseBinary = true;
                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();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        /// <summary>
        /// 下载的异步方法
        /// </summary>
        /// <param name="filePath">下载保存的文件夹路径</param>
        /// <param name="fileName">文件名称</param>
        /// <returns></returns>
        public Task<bool> DownloadAsync(string filePath, string fileName)
        {
            return Task.Run(() => { return Download(filePath, fileName); });
        }

        /// <summary>
        /// 获取文件名称
        /// </summary>
        /// <param name="url">为空则获取根目录下所有</param>
        /// <returns></returns>
        public string[] GetAllList(string url)
        {
            List<string> list = new List<string>();
            FtpWebRequest req = (FtpWebRequest)WebRequest.Create(new Uri(ftpURI));
            req.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            req.Method = WebRequestMethods.Ftp.ListDirectory;
            req.UseBinary = true;
            req.UsePassive = true;
            try
            {
                using (FtpWebResponse res = (FtpWebResponse)req.GetResponse())
                {
                    using (StreamReader sr = new StreamReader(res.GetResponseStream()))
                    {
                        string s;
                        while ((s = sr.ReadLine()) != null)
                        {
                            list.Add(s);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw (ex);
            }
            return list.ToArray();
        }



        /// <summary>  
        /// 获取当前目录下明细(包含文件和文件夹)  
        /// </summary>  
        public string[] GetFilesDetailList()
        {
            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());
                string line = reader.ReadLine();
                line = reader.ReadLine();
                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)
            {
                throw new Exception(ex.Message);
            }
        }


        /// <summary>  
        /// 移动文件  
        /// </summary>  
        public void MovieFile(string currentFilename, string newDirectory)
        {
            ReName(currentFilename, newDirectory);
        }
        /// <summary>  
        /// 更改文件名  
        /// </summary> 
        public bool 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();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
        /// <summary>  
        /// 获取指定文件大小  
        /// </summary>  
        public 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)
            {

            }
            return fileSize;
        }
        /// <summary>  
        /// 创建文件夹  
        /// </summary>   
        public bool MakeDir(string dirName)
        {
            FtpWebRequest reqFTP;
            try
            {
                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();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        /// <summary>  
        /// 删除文件  
        /// </summary>  
        public bool Delete(string fileName)
        {
            try
            {
                FtpWebRequest reqFTP;
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
                reqFTP.KeepAlive = false;
                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;
            }
        }

        /// <summary>  
        /// 上传  
        /// </summary>   
        public bool Upload(string filename)
        {
            FileInfo fileInf = new FileInfo(filename);
            FtpWebRequest reqFTP;
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileInf.Name));
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
            reqFTP.KeepAlive = false;
            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();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        /// <summary>
        /// 上传的异步方法
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        public Task<bool> UploadAsync(string filename)
        {
            return Task.Run(() => { return Upload(filename); });
        }
    }
}

posted @   披着披风吹着风  阅读(758)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 错位时空 艾辰
  2. 2 But U NINEONE#
  3. 3 指纹 杜宣达
  4. 4 嗜好 颜人中
  5. 5 破茧 张韶涵
  6. 6 画心 张靓颖
  7. 7 消愁 毛不易
  8. 8 会不会(吉他版) 刘大壮
  9. 9 独行侠+爱如潮水remix sea蕊,吴炳文Cookie
  10. 10 嘉宾 路飞文
  11. 11 百年孤寂 苏玮
  12. 12 月光 胡彦斌
指纹 - 杜宣达
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 周剑光

作曲 : 郑宇界

编曲 : 任斌

原唱 : 胡歌

制作人 : 王圆坤@不要音乐

出品 : 太合音乐x银河方舟

音乐发行 : 太合麦田

制作总监 : 蔡庭贵

策略营销 : 武鹏

和声 : Eileen Shan Zou

混音工程师 : 郑昊杰

母带工程师 : 郑昊杰

项目统筹 : 闫曼嘉/黄路欢/chili

企划 : AiryX/袋熊/Frank/黄路欢

项目协力 : 李靖/ELANUS/One

封面设计 : ELANUS

我们 变成一对 差点缘分

我们 变成一对 差点缘分

装成朋友少点天分

坦然不是每个人都能

我们 结成伴趟过的天真

没了天真选择孤身

以为成熟需要不诚恳

你也不承认

自己会失衡

坚持着分寸

却又依赖着余温

旋转几轮 变成我们

旋转几轮 变成我们

深刻的指纹

留在每个 爱过的人

心房里加温

爱过几番 恨过几轮

越仔细越疼

等了多久 忍过青春

却憎恨 别人奋不顾身

我们 抓紧了所谓的人生

我们 抓紧了所谓的人生

追逐爱恨交换灵魂

选择自己满意的身份

我何苦又问

你是否认真

指尖的年轮

是催促我们

沉沦的印证

旋转几轮 变成我们

深刻的指纹

深刻的指纹

留在每个 爱过的人

心房里加温

爱过几番 恨过几轮

越仔细越疼

等了多久 忍过青春

却憎恨 别人奋不顾身

旋转几轮 变成我们

旋转几轮 变成我们

深刻的指纹

留在每个 爱过的人

心房里加温

爱过几番 恨过几轮

越仔细越疼

等了多久 忍过青春

却憎恨 别人奋不顾身