FTP简单代码

FTP简单管理代码。。在这个做个备注

using System.Collections.Generic;
using System.IO;

namespace CommonSystemFrameWork.Storage
{
    public abstract class StorageProvider
    {
        public abstract List<string> List(string path);
        public abstract List<string> List(string path, string fillter);
        public abstract bool Upload(string src, string dest);
        public abstract bool Download(string src, string dest);
        public abstract Stream Download(string src);
        public abstract string GetDestinationDirectory();
        public abstract bool Delete(string path);
        public abstract bool MakeDir(string path);
        public abstract bool CanRead();
        public abstract bool CanWrite();
        public abstract bool CanList();
        public abstract bool CanDelete();
    }
}
FTP
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;

namespace CommonSystemFrameWork.Storage
{
    //FTP
    public class FtpStorageProvider: StorageProvider
    {

        private string m_username;
        private string m_password;
        private bool m_usePassive;
        private bool m_enableSsl;
        private string m_path;
        private bool m_auth;
        private string m_destinationDirectory;

        public string DestinationDirectory
        {
            get { return m_destinationDirectory; }
            set { m_destinationDirectory = value; }
        }

        public bool Auth
        {
            get { return m_auth; }
            set { m_auth = value; }
        }
        public string Path
        {
            get { return m_path; }
            set { m_path = value; }
        }
        public bool EnableSsl
        {
            get { return m_enableSsl; }
            set { m_enableSsl = value; }
        }
        public bool PassiveMode
        {
            get { return m_usePassive; }
            set { m_usePassive = value; }
        }

        public string Password
        {
            get { return m_password; }
            set { m_password = value; }
        }
        public string Username
        {
            get { return m_username; }
            set { m_username = value; }
        }

        private ICredentials GetCredentials()
        {
            if (m_auth)
                return new NetworkCredential(m_username, m_password);
            else
                return new CredentialCache();
        }
        private Uri GetUri(string subPath)
        {
            return new Uri(m_path + subPath);
        }
        private static string[] ReadLines(Stream src)
        {
            List<string> lines = new List<string>();
            StreamReader r = new StreamReader(src);
            while (!r.EndOfStream)
            {
                lines.Add(r.ReadLine());
            }
            return lines.ToArray();
        }
        private void CopyStream(Stream src, Stream dest)
        {
            try
            {
                int bytesRead;
                byte[] buffer = new byte[1024];

                do
                {
                    bytesRead = src.Read(buffer, 0, buffer.Length);
                    if (bytesRead > 1) dest.Write(buffer, 0, bytesRead);
                } while (bytesRead == buffer.Length);
                dest.Flush();
            }
            catch (Exception err)
            {
                log4net.Util.LogLog.Error(err.Message);
                Console.WriteLine(err.Message);
            }
        }



        public override List<string> List(string path)
        {
            List<string> list = new List<string>();

            try
            {
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(GetUri(path));
                request.UsePassive = m_usePassive;
                request.EnableSsl = m_enableSsl;
                request.Credentials = GetCredentials();
                request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                request.KeepAlive = false;
                request.UseBinary = true;

                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                string[] lines = ReadLines(response.GetResponseStream());
                foreach (string line in lines)
                {
                    string[] arguments = line.Split(new char[] { '\x20', '\t' }, 4, StringSplitOptions.RemoveEmptyEntries);
                    bool isFolder = arguments[2].Equals("<DIR>");
                    if (!isFolder)
                    {
                        list.Add(arguments[3]);
                    }
                }
            }
            catch { }

            return list;
        }

        public override List<string> List(string path, string fillter)
        {
            List<string> list = new List<string>();
            try
            {
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(GetUri(path));
                request.UsePassive = m_usePassive;
                request.EnableSsl = m_enableSsl;
                request.Credentials = GetCredentials();
                request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                request.KeepAlive = false;
                request.UseBinary = true;

                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                string[] lines = ReadLines(response.GetResponseStream());
                foreach (string line in lines)
                {
                    string[] arguments = line.Split(new char[] { '\x20', '\t' }, 4, StringSplitOptions.RemoveEmptyEntries);
                    bool isFolder = arguments[2].Equals("<DIR>");
                    if (!isFolder)
                    {
                        if (fillter.IndexOf(System.IO.Path.GetExtension(arguments[3])) >= 0)
                            list.Add(arguments[3]);
                    }
                }
            }
            catch { }

            return list;
        }

        public override bool Upload(string src, string dest)
        {
            try
            {
                Uri remoteUri = GetUri(dest);
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(remoteUri);
                request.UsePassive = m_usePassive;
                request.EnableSsl = m_enableSsl;
                request.Credentials = GetCredentials();
                request.Method = WebRequestMethods.Ftp.UploadFile;

                request.KeepAlive = false;
                request.UseBinary = true;


                Stream srcStream = File.OpenRead(src);
                Stream destStream = request.GetRequestStream();
                CopyStream(srcStream, destStream);

                srcStream.Close();
                destStream.Close();
                try
                {
                    WebResponse response = request.GetResponse();
                    response.Close();
                }
                catch (Exception ex)
                {
                    log4net.Util.LogLog.Error("error uploading the file :" + ex.Message);
                    Console.WriteLine(ex.Message);
                }
            }
            catch (Exception err)
            {
                log4net.Util.LogLog.Error("error uploading the file :" + err.Message);
                Console.WriteLine(err.Message);
                return false;
            }

            return true;
        }

        public override bool Download(string src, string dest)
        {
            try
            {
                Uri remoteUri = GetUri(System.IO.Path.GetFileName(src));
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(remoteUri);
                request.UsePassive = m_usePassive;
                request.EnableSsl = m_enableSsl;
                request.Credentials = GetCredentials();
                request.Method = WebRequestMethods.Ftp.DownloadFile;

                request.KeepAlive = false;
                request.UseBinary = true;

                WebResponse response = request.GetResponse();

                Stream srcStream = response.GetResponseStream();
                Stream destStream = File.OpenWrite(dest);
                CopyStream(srcStream, destStream);

                srcStream.Close();
                destStream.Close();
                response.Close();
            }
            catch
            {
                return false;
            }
            return true;
        }

        public override Stream Download(string src)
        {
            try
            {
                Uri remoteUri = GetUri(src.ToLower());
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(remoteUri);
                request.UsePassive = m_usePassive;
                request.EnableSsl = m_enableSsl;
                request.Credentials = GetCredentials();
                request.Method = WebRequestMethods.Ftp.DownloadFile;

                request.KeepAlive = false;
                request.UseBinary = true;

                WebResponse response = request.GetResponse();

                return response.GetResponseStream();
            }
            catch
            {
                //log4net.Util.LogLog.Error("Error in Function Download, in FtpStorgaeProvider.cs " + err.Message);
            }
            return null;
        }

        public override bool MakeDir(string path)
        {
            try
            {
                Uri remote = GetUri(path);
                Console.WriteLine("Remote: " + remote.AbsoluteUri);
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(remote);
                request.UsePassive = m_usePassive;
                request.EnableSsl = m_enableSsl;
                request.Credentials = GetCredentials();
                request.Method = WebRequestMethods.Ftp.MakeDirectory;
                request.KeepAlive = false;
                request.UseBinary = true;

                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                Console.WriteLine("MakeDir status: {0}", response.StatusDescription);
                response.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return false;
            }
            return true;

        }

        public override string GetDestinationDirectory()
        {
            return string.Empty;
        }

        public override bool CanRead()
        {
            return true;
        }

        public override bool CanWrite()
        {
            return true;
        }

        public override bool CanList()
        {
            return true;
        }

        public override bool Delete(string path)
        {
            try
            {
                Uri remote = GetUri(path);
                Console.WriteLine("Remote: " + remote.AbsoluteUri);
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(remote);
                request.UsePassive = m_usePassive;
                request.EnableSsl = m_enableSsl;
                request.Credentials = GetCredentials();
                request.Method = WebRequestMethods.Ftp.DeleteFile;
                request.KeepAlive = false;
                request.UseBinary = true;

                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                Console.WriteLine("Delete status: {0}", response.StatusDescription);
                response.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return false;
            }
            return true;
        }

        public override bool CanDelete()
        {
            return true;
        }
    }
}

 

防止下次忘记。。

转载于:https://www.cnblogs.com/w2011/archive/2013/03/10/2953094.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自己写的ftp服务端程序代码,支持{"USER", do_user }, {"PASS", do_pass }, {"CWD", do_cwd }, {"XCWD", do_cwd }, {"CDUP", do_cdup }, {"REIN", do_rein },//重新初始化,此命令终止USER,重置所有参数,控制连接仍然打开,用户可以再次使用USER命令 {"QUIT", do_quit }, /*------------传输参数命令------------*/ {"PORT", do_port },//数据端口,主要向服务器发送客户数据连接的端口 //格式为PORT h1,h2,h3,h4,p1,p2,其中32位的IP地址用h1,h2,h3,h4表示,16位的TCP端口号用p1,p2表示 {"PASV", do_pasv },//此命令要求服务器数据传输进程在指定的数据端口侦听,进入被动接收请求的状态 {"TYPE", do_type },//文件类型,可指定ASCII码、EBCDIC码、Image、本地类型文件等参数 /*------------服务命令----------------*/ {"RETR", do_retr },//下载文件 {"STOR", do_stor },//上传 {"APPE", do_appe },//上传,如文件已存在,数据附加到尾部 {"REST", do_rest },//重新开始 {"RNFR", do_rnfr }, {"RNTO", do_rnto },//重命名文件或目录 {"ABOR", do_abor },//异常终止 {"DELE", do_dele },//删除文件 {"RMD", do_rmd },//删除目录 {"XRMD", do_rmd }, {"MKD", do_mkd },//新建目录 {"XMKD", do_mkd }, {"PWD", do_pwd },//打印当前目录 {"XPWD", do_pwd }, {"LIST", do_list },//列目录详细清单 {"NLST", do_nlst },//列目录短清单 {"SYST", do_syst },//获取系统信息 {"STAT", do_stat },//返回服务器状态 {"SIZE", do_size },//获得文件大小 {"HELP", do_help }, {"NOOP", do_noop }, {"SITE", do_site }, }等命令

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值