FTP协议操作
FTP协议操作代码
采用MS的FTP协议封装
 using System;
using System; using System.Collections.Generic;
using System.Collections.Generic; using System.Text;
using System.Text; using System.Net;
using System.Net; using System.IO;
using System.IO; using System.DirectoryServices.Protocols;
using System.DirectoryServices.Protocols;
 namespace Vancl.FileUtility
namespace Vancl.FileUtility

 {
{ public class FtpCmd
    public class FtpCmd
 
     {
{
 创建文件夹#region 创建文件夹
        创建文件夹#region 创建文件夹
 /**//// <summary>
        /**//// <summary> /// 创建文件夹:不实现级联创建
        /// 创建文件夹:不实现级联创建 /// 返回:true成功,false失败
        /// 返回:true成功,false失败 /// </summary>
        /// </summary> /// <param name="BaseUriStr">基Uri字符串:如ftp://192.168.1.190:21</param>
        /// <param name="BaseUriStr">基Uri字符串:如ftp://192.168.1.190:21</param> /// <param name="AimUriStr">目标目录名,相对路径:如/FTF</param>
        /// <param name="AimUriStr">目标目录名,相对路径:如/FTF</param> /// <param name="UserName">用户名</param>
        /// <param name="UserName">用户名</param> /// <param name="UserPwd">用户密码</param>
        /// <param name="UserPwd">用户密码</param> /// <returns></returns>
        /// <returns></returns> public static bool CreateFtpDirectory(string BaseUriStr, string AimUriStr, string UserName, string UserPwd)
        public static bool CreateFtpDirectory(string BaseUriStr, string AimUriStr, string UserName, string UserPwd)
 
         {
{ Uri BaseUri = new Uri(BaseUriStr);
            Uri BaseUri = new Uri(BaseUriStr); Uri AimUri = new Uri(BaseUri, AimUriStr);
            Uri AimUri = new Uri(BaseUri, AimUriStr); FtpWebRequest FtpRequest = (FtpWebRequest)WebRequest.Create(AimUri);
            FtpWebRequest FtpRequest = (FtpWebRequest)WebRequest.Create(AimUri); FtpRequest.KeepAlive = true;
            FtpRequest.KeepAlive = true; FtpRequest.Timeout = 2000;
            FtpRequest.Timeout = 2000; FtpRequest.UsePassive = false;
            FtpRequest.UsePassive = false; NetworkCredential FtpCred = new NetworkCredential(UserName, UserPwd);
            NetworkCredential FtpCred = new NetworkCredential(UserName, UserPwd); CredentialCache FtpCache = new CredentialCache();
            CredentialCache FtpCache = new CredentialCache(); FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred);
            FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred); FtpRequest.Credentials = FtpCache;
            FtpRequest.Credentials = FtpCache; FtpRequest.Method = WebRequestMethods.Ftp.MakeDirectory;
            FtpRequest.Method = WebRequestMethods.Ftp.MakeDirectory;
 try
            try
 
             {
{ FtpWebResponse FtpResponse = (FtpWebResponse)FtpRequest.GetResponse();
                FtpWebResponse FtpResponse = (FtpWebResponse)FtpRequest.GetResponse(); if (FtpResponse.StatusCode == FtpStatusCode.PathnameCreated)
                if (FtpResponse.StatusCode == FtpStatusCode.PathnameCreated)
 
                 {
{ FtpResponse.Close();
                    FtpResponse.Close(); return true;
                    return true; }
                } else
                else
 
                 {
{ FtpResponse.Close();
                    FtpResponse.Close(); return false;
                    return false; }
                } }
            } catch (WebException e)
            catch (WebException e)
 
             {
{ FtpWebResponse FtpResponse = (FtpWebResponse)e.Response;
                FtpWebResponse FtpResponse = (FtpWebResponse)e.Response; if (FtpResponse.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
                if (FtpResponse.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
 
                 {
{ //文件已存在,返回True
                    //文件已存在,返回True FtpResponse.Close();
                    FtpResponse.Close(); return true;
                    return true; }
                } else
                else
 
                 {
{ FtpResponse.Close();
                    FtpResponse.Close(); return false;
                    return false; }
                } }
            } }
        }
 /**//// <summary>
        /**//// <summary> /// 创建文件夹:实现级联创建
        /// 创建文件夹:实现级联创建 /// 返回:true成功,false失败
        /// 返回:true成功,false失败 /// </summary>
        /// </summary> /// <param name="BaseUriStr">基Uri字符串:如ftp://192.168.1.190:21</param>
        /// <param name="BaseUriStr">基Uri字符串:如ftp://192.168.1.190:21</param> /// <param name="AimUriStr">目标目录名,相对路径:如/FTF/FTF1/FTF2/FTF3</param>
        /// <param name="AimUriStr">目标目录名,相对路径:如/FTF/FTF1/FTF2/FTF3</param> /// <param name="UserName">用户名</param>
        /// <param name="UserName">用户名</param> /// <param name="UserPwd">用户密码</param>
        /// <param name="UserPwd">用户密码</param> /// <returns></returns>
        /// <returns></returns> public static bool CreateFtpListDirectory(string BaseUriStr, string AimUriStr, string UserName, string UserPwd)
        public static bool CreateFtpListDirectory(string BaseUriStr, string AimUriStr, string UserName, string UserPwd)
 
         {
{ string[] AimUriArray = AimUriStr.TrimStart('/').Split('/');
            string[] AimUriArray = AimUriStr.TrimStart('/').Split('/'); string AimUriCache = string.Empty;
            string AimUriCache = string.Empty; for (int i = 0; i < AimUriArray.Length; i++)
            for (int i = 0; i < AimUriArray.Length; i++)
 
             {
{ AimUriCache += "/" + AimUriArray[i];
                AimUriCache += "/" + AimUriArray[i]; if (CreateFtpDirectory(BaseUriStr, AimUriCache, UserName, UserPwd))
                if (CreateFtpDirectory(BaseUriStr, AimUriCache, UserName, UserPwd))
 
                 {
{ continue;
                    continue; }
                } else
                else
 
                 {
{ if (CreateFtpDirectory(BaseUriStr, AimUriCache, UserName, UserPwd))
                    if (CreateFtpDirectory(BaseUriStr, AimUriCache, UserName, UserPwd))
 
                     {
{ continue;
                        continue; }
                    } else
                    else
 
                     {
{ return false;
                        return false; }
                    } }
                } }
            }
 return true;
            return true; }
        } #endregion
        #endregion

 删除文件夹#region 删除文件夹
        删除文件夹#region 删除文件夹
 /**//// <summary>
        /**//// <summary> /// 删除文件夹,不实现级联删除
        /// 删除文件夹,不实现级联删除 /// 返回:true成功,false失败
        /// 返回:true成功,false失败 /// </summary>
        /// </summary> /// <param name="BaseUriStr">基Uri字符串:如ftp://192.168.1.190:21</param>
        /// <param name="BaseUriStr">基Uri字符串:如ftp://192.168.1.190:21</param> /// <param name="AimUriStr">目标目录,相对路径:如/FTF/FTFDEL</param>
        /// <param name="AimUriStr">目标目录,相对路径:如/FTF/FTFDEL</param> /// <param name="UserName">用户名</param>
        /// <param name="UserName">用户名</param> /// <param name="UserPwd">用户密码</param>
        /// <param name="UserPwd">用户密码</param> /// <returns></returns>
        /// <returns></returns> public static bool DeleteFtpDirectory(string BaseUriStr, string AimUriStr, string UserName, string UserPwd)
        public static bool DeleteFtpDirectory(string BaseUriStr, string AimUriStr, string UserName, string UserPwd)
 
         {
{ Uri BaseUri = new Uri(BaseUriStr);
            Uri BaseUri = new Uri(BaseUriStr); Uri AimUri = new Uri(BaseUri, AimUriStr);
            Uri AimUri = new Uri(BaseUri, AimUriStr); FtpWebRequest FtpRequest = (FtpWebRequest)WebRequest.Create(AimUri);
            FtpWebRequest FtpRequest = (FtpWebRequest)WebRequest.Create(AimUri); FtpRequest.KeepAlive = true;
            FtpRequest.KeepAlive = true; FtpRequest.Timeout = 2000;
            FtpRequest.Timeout = 2000; FtpRequest.UsePassive = false;
            FtpRequest.UsePassive = false; NetworkCredential FtpCred = new NetworkCredential(UserName, UserPwd);
            NetworkCredential FtpCred = new NetworkCredential(UserName, UserPwd); CredentialCache FtpCache = new CredentialCache();
            CredentialCache FtpCache = new CredentialCache(); FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred);
            FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred); FtpRequest.Credentials = FtpCache;
            FtpRequest.Credentials = FtpCache; FtpRequest.Method = WebRequestMethods.Ftp.RemoveDirectory;
            FtpRequest.Method = WebRequestMethods.Ftp.RemoveDirectory;
 try
            try
 
             {
{ FtpWebResponse FtpResponse = (FtpWebResponse)FtpRequest.GetResponse();
                FtpWebResponse FtpResponse = (FtpWebResponse)FtpRequest.GetResponse(); if (FtpResponse.StatusCode == FtpStatusCode.FileActionOK)
                if (FtpResponse.StatusCode == FtpStatusCode.FileActionOK)
 
                 {
{ FtpResponse.Close();
                    FtpResponse.Close(); return true;
                    return true; }
                } else
                else
 
                 {
{ FtpResponse.Close();
                    FtpResponse.Close(); return false;
                    return false; }
                } }
            } catch (WebException e)
            catch (WebException e)
 
             {
{ FtpWebResponse FtpResponse = (FtpWebResponse)e.Response;
                FtpWebResponse FtpResponse = (FtpWebResponse)e.Response; //如果返回信息表示文件不可操作或不存在,表明文件夹已经被删除
                //如果返回信息表示文件不可操作或不存在,表明文件夹已经被删除 if (FtpResponse.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
                if (FtpResponse.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
 
                 {
{ FtpResponse.Close();
                    FtpResponse.Close(); return true;
                    return true; }
                } else
                else
 
                 {
{ //返回其他错误:可能出现问题
                    //返回其他错误:可能出现问题 FtpResponse.Close();
                    FtpResponse.Close(); return false;
                    return false; }
                } }
            } }
        }
 /**//// <summary>
        /**//// <summary> /// 删除文件夹,实现级联删除
        /// 删除文件夹,实现级联删除 /// 返回:true成功,false失败
        /// 返回:true成功,false失败 /// </summary>
        /// </summary> /// <param name="BaseUriStr">基Uri字符串:如ftp://192.168.1.190:21</param>
        /// <param name="BaseUriStr">基Uri字符串:如ftp://192.168.1.190:21</param> /// <param name="AimUriStr">目标目录,相对路径:如/FTF/FTFDEL</param>
        /// <param name="AimUriStr">目标目录,相对路径:如/FTF/FTFDEL</param> /// <param name="UserName">用户名</param>
        /// <param name="UserName">用户名</param> /// <param name="UserPwd">用户密码</param>
        /// <param name="UserPwd">用户密码</param> /// <returns></returns>
        /// <returns></returns> public static bool DeleteFtpListDirectory(string BaseUriStr, string AimUriStr, string UserName, string UserPwd)
        public static bool DeleteFtpListDirectory(string BaseUriStr, string AimUriStr, string UserName, string UserPwd)
 
         {
{ List<string> DirectoryDetailList = ListFtpDirectory(BaseUriStr, AimUriStr, UserName, UserPwd);
            List<string> DirectoryDetailList = ListFtpDirectory(BaseUriStr, AimUriStr, UserName, UserPwd); foreach (string ListDetail in DirectoryDetailList)
            foreach (string ListDetail in DirectoryDetailList)
 
             {
{ if (ListDetail.EndsWith("|D"))
                if (ListDetail.EndsWith("|D"))
 
                 {
{ //删除文件夹内容
                    //删除文件夹内容 if (ListFtpDirectory(BaseUriStr, AimUriStr + "/" + ListDetail.Split('|')[0], UserName, UserPwd).Count == 0)
                    if (ListFtpDirectory(BaseUriStr, AimUriStr + "/" + ListDetail.Split('|')[0], UserName, UserPwd).Count == 0)
 
                     {
{ if (!DeleteFtpDirectory(BaseUriStr, AimUriStr + "/" + ListDetail.Split('|')[0], UserName, UserPwd))
                        if (!DeleteFtpDirectory(BaseUriStr, AimUriStr + "/" + ListDetail.Split('|')[0], UserName, UserPwd))
 
                         {
{ return false;
                            return false; }
                        } }
                    } else
                    else
 
                     {
{ if (!DeleteFtpListDirectory(BaseUriStr, AimUriStr + "/" + ListDetail.Split('|')[0], UserName, UserPwd))
                        if (!DeleteFtpListDirectory(BaseUriStr, AimUriStr + "/" + ListDetail.Split('|')[0], UserName, UserPwd))
 
                         {
{ return false;
                            return false; }
                        } }
                    } }
                } if (ListDetail.EndsWith("|F"))
                if (ListDetail.EndsWith("|F"))
 
                 {
{ //删除文件
                    //删除文件 if (!DeleteFtpFile(BaseUriStr, AimUriStr + "/" + ListDetail.Split('|')[0], UserName, UserPwd))
                    if (!DeleteFtpFile(BaseUriStr, AimUriStr + "/" + ListDetail.Split('|')[0], UserName, UserPwd))
 
                     {
{ return false;
                        return false; }
                    } }
                } }
            } //删除当前文件夹
            //删除当前文件夹 if (!DeleteFtpDirectory(BaseUriStr, AimUriStr, UserName, UserPwd))
            if (!DeleteFtpDirectory(BaseUriStr, AimUriStr, UserName, UserPwd))
 
             {
{ return false;
                return false; }
            }
 return true;
            return true; }
        } #endregion
        #endregion

 获取文件夹内文件和文件夹列表信息#region 获取文件夹内文件和文件夹列表信息
        获取文件夹内文件和文件夹列表信息#region 获取文件夹内文件和文件夹列表信息
 /**//// <summary>
        /**//// <summary> /// 获取文件夹内文件信息
        /// 获取文件夹内文件信息 /// </summary>
        /// </summary> /// <param name="BaseUriStr">基Uri:如ftp://192.168.1.190:21</param>
        /// <param name="BaseUriStr">基Uri:如ftp://192.168.1.190:21</param> /// <param name="AimUriStr">目标目录,相对路径:如/FTF/FTF1</param>
        /// <param name="AimUriStr">目标目录,相对路径:如/FTF/FTF1</param> /// <param name="UserName">用户名</param>
        /// <param name="UserName">用户名</param> /// <param name="UserPwd">用户密码</param>
        /// <param name="UserPwd">用户密码</param> /// <returns></returns>
        /// <returns></returns> public static List<string> ListFtpDirectory(string BaseUriStr, string AimUriStr, string UserName, string UserPwd)
        public static List<string> ListFtpDirectory(string BaseUriStr, string AimUriStr, string UserName, string UserPwd)
 
         {
{ Uri BaseUri = new Uri(BaseUriStr);
            Uri BaseUri = new Uri(BaseUriStr); Uri AimUri = new Uri(BaseUri, AimUriStr);
            Uri AimUri = new Uri(BaseUri, AimUriStr); FtpWebRequest FtpRequest = (FtpWebRequest)WebRequest.Create(AimUri);
            FtpWebRequest FtpRequest = (FtpWebRequest)WebRequest.Create(AimUri); FtpRequest.KeepAlive = true;
            FtpRequest.KeepAlive = true; FtpRequest.ReadWriteTimeout = 10000;
            FtpRequest.ReadWriteTimeout = 10000; FtpRequest.UsePassive = false;
            FtpRequest.UsePassive = false; NetworkCredential FtpCred = new NetworkCredential(UserName, UserPwd);
            NetworkCredential FtpCred = new NetworkCredential(UserName, UserPwd); CredentialCache FtpCache = new CredentialCache();
            CredentialCache FtpCache = new CredentialCache(); FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred);
            FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred); FtpRequest.Credentials = FtpCache;
            FtpRequest.Credentials = FtpCache; FtpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
            FtpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
 try
            try
 
             {
{ FtpWebResponse FtpResponse = (FtpWebResponse)FtpRequest.GetResponse();
                FtpWebResponse FtpResponse = (FtpWebResponse)FtpRequest.GetResponse(); StreamReader srd = new StreamReader(FtpResponse.GetResponseStream(), Encoding.GetEncoding("GB2312"));
                StreamReader srd = new StreamReader(FtpResponse.GetResponseStream(), Encoding.GetEncoding("GB2312")); string ResponseBackStr = srd.ReadToEnd();
                string ResponseBackStr = srd.ReadToEnd(); srd.Close();
                srd.Close(); FtpResponse.Close();
                FtpResponse.Close();

 string[] ListDetails = ResponseBackStr.Split(new string[]
                string[] ListDetails = ResponseBackStr.Split(new string[]  { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
{ "\r\n" }, StringSplitOptions.RemoveEmptyEntries); List<string> RtnList = new List<string>();
                List<string> RtnList = new List<string>(); foreach (string ListDetail in ListDetails)
                foreach (string ListDetail in ListDetails)
 
                 {
{ if (ListDetail.StartsWith("d") && (!ListDetail.EndsWith(".")))
                    if (ListDetail.StartsWith("d") && (!ListDetail.EndsWith(".")))
 
                     {
{ string FtpDirName = ListDetail.Substring(ListDetail.IndexOf(':') + 3).TrimStart();
                        string FtpDirName = ListDetail.Substring(ListDetail.IndexOf(':') + 3).TrimStart(); RtnList.Add(FtpDirName + "|D");
                        RtnList.Add(FtpDirName + "|D"); }
                    } else if (ListDetail.StartsWith("-"))
                    else if (ListDetail.StartsWith("-"))
 
                     {
{ string FtpDirName = ListDetail.Substring(ListDetail.IndexOf(':') + 3).TrimStart();
                        string FtpDirName = ListDetail.Substring(ListDetail.IndexOf(':') + 3).TrimStart(); RtnList.Add(FtpDirName + "|F");
                        RtnList.Add(FtpDirName + "|F"); }
                    } }
                }
 return RtnList;
                return RtnList; }
            } catch (WebException e)
            catch (WebException e)
 
             {
{ FtpWebResponse FtpResponse = (FtpWebResponse)e.Response;
                FtpWebResponse FtpResponse = (FtpWebResponse)e.Response; FtpResponse.Close();
                FtpResponse.Close();
 return new List<string>();
                return new List<string>(); }
            } }
        } #endregion
        #endregion

 删除指定文件#region 删除指定文件
        删除指定文件#region 删除指定文件
 /**//// <summary>
        /**//// <summary> /// 删除指定文件
        /// 删除指定文件 /// </summary>
        /// </summary> /// <param name="BaseUriStr">基Uri字符串,如ftp://192.168.1.190:21</param>
        /// <param name="BaseUriStr">基Uri字符串,如ftp://192.168.1.190:21</param> /// <param name="AimUriStr">目标目录,相对路径:如/FTF/FTFDEL</param>
        /// <param name="AimUriStr">目标目录,相对路径:如/FTF/FTFDEL</param> /// <param name="UserName">用户名</param>
        /// <param name="UserName">用户名</param> /// <param name="UserPwd">用户密码</param>
        /// <param name="UserPwd">用户密码</param> /// <returns></returns>
        /// <returns></returns> public static bool DeleteFtpFile(string BaseUriStr, string AimUriStr, string UserName, string UserPwd)
        public static bool DeleteFtpFile(string BaseUriStr, string AimUriStr, string UserName, string UserPwd)
 
         {
{ Uri BaseUri = new Uri(BaseUriStr);
            Uri BaseUri = new Uri(BaseUriStr); Uri AimUri = new Uri(BaseUri, AimUriStr);
            Uri AimUri = new Uri(BaseUri, AimUriStr); FtpWebRequest FtpRequest = (FtpWebRequest)WebRequest.Create(AimUri);
            FtpWebRequest FtpRequest = (FtpWebRequest)WebRequest.Create(AimUri); FtpRequest.KeepAlive = true;
            FtpRequest.KeepAlive = true; FtpRequest.Timeout = 2000;
            FtpRequest.Timeout = 2000; FtpRequest.UsePassive = false;
            FtpRequest.UsePassive = false; NetworkCredential FtpCred = new NetworkCredential(UserName, UserPwd);
            NetworkCredential FtpCred = new NetworkCredential(UserName, UserPwd); CredentialCache FtpCache = new CredentialCache();
            CredentialCache FtpCache = new CredentialCache(); FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred);
            FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred); FtpRequest.Credentials = FtpCache;
            FtpRequest.Credentials = FtpCache; FtpRequest.Method = WebRequestMethods.Ftp.DeleteFile;
            FtpRequest.Method = WebRequestMethods.Ftp.DeleteFile;
 try
            try
 
             {
{ FtpWebResponse FtpResponse = (FtpWebResponse)FtpRequest.GetResponse();
                FtpWebResponse FtpResponse = (FtpWebResponse)FtpRequest.GetResponse(); if (FtpResponse.StatusCode == FtpStatusCode.FileActionOK)
                if (FtpResponse.StatusCode == FtpStatusCode.FileActionOK)
 
                 {
{ FtpResponse.Close();
                    FtpResponse.Close(); return true;
                    return true; }
                } else
                else
 
                 {
{ FtpResponse.Close();
                    FtpResponse.Close(); return false;
                    return false; }
                } }
            } catch (WebException e)
            catch (WebException e)
 
             {
{ FtpWebResponse FtpResponse = (FtpWebResponse)e.Response;
                FtpWebResponse FtpResponse = (FtpWebResponse)e.Response; if (FtpResponse.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
                if (FtpResponse.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
 
                 {
{ FtpResponse.Close();
                    FtpResponse.Close(); return true;
                    return true; }
                } else
                else
 
                 {
{ FtpResponse.Close();
                    FtpResponse.Close(); return false;
                    return false; }
                } }
            } }
        } #endregion
        #endregion

 上传文件#region 上传文件
        上传文件#region 上传文件
 /**//// <summary>
        /**//// <summary> /// 上传文件到指定位置
        /// 上传文件到指定位置 /// </summary>
        /// </summary> /// <param name="BaseUriStr">基Uri字符串,如ftp://192.168.1.190:21</param>
        /// <param name="BaseUriStr">基Uri字符串,如ftp://192.168.1.190:21</param> /// <param name="AimUriStr">目标位置,相对路径:如/FTF/FTFDEL/K.pdf</param>
        /// <param name="AimUriStr">目标位置,相对路径:如/FTF/FTFDEL/K.pdf</param> /// <param name="UserName">用户名</param>
        /// <param name="UserName">用户名</param> /// <param name="UserPwd">用户密码</param>
        /// <param name="UserPwd">用户密码</param> /// <param name="SrcFilePath">源文件位置</param>
        /// <param name="SrcFilePath">源文件位置</param> /// <returns></returns>
        /// <returns></returns> public static bool UploadFtpFile(string BaseUriStr, string AimUriStr, string UserName, string UserPwd, string SrcFilePath)
        public static bool UploadFtpFile(string BaseUriStr, string AimUriStr, string UserName, string UserPwd, string SrcFilePath)
 
         {
{ Uri BaseUri = new Uri(BaseUriStr);
            Uri BaseUri = new Uri(BaseUriStr); Uri AimUri = new Uri(BaseUri, AimUriStr);
            Uri AimUri = new Uri(BaseUri, AimUriStr); FtpWebRequest FtpRequest = (FtpWebRequest)WebRequest.Create(AimUri);
            FtpWebRequest FtpRequest = (FtpWebRequest)WebRequest.Create(AimUri); FtpRequest.KeepAlive = true;
            FtpRequest.KeepAlive = true; FtpRequest.ReadWriteTimeout = 10000;
            FtpRequest.ReadWriteTimeout = 10000; FtpRequest.UsePassive = false;
            FtpRequest.UsePassive = false; NetworkCredential FtpCred = new NetworkCredential(UserName, UserPwd);
            NetworkCredential FtpCred = new NetworkCredential(UserName, UserPwd); CredentialCache FtpCache = new CredentialCache();
            CredentialCache FtpCache = new CredentialCache(); FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred);
            FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred); FtpRequest.Credentials = FtpCache;
            FtpRequest.Credentials = FtpCache; FtpRequest.Method = WebRequestMethods.Ftp.UploadFile;
            FtpRequest.Method = WebRequestMethods.Ftp.UploadFile;
 try
            try
 
             {
{ Stream stm = FtpRequest.GetRequestStream();
                Stream stm = FtpRequest.GetRequestStream(); byte[] RequestByteArray = File.ReadAllBytes(SrcFilePath);
                byte[] RequestByteArray = File.ReadAllBytes(SrcFilePath); stm.Write(RequestByteArray, 0, RequestByteArray.Length);
                stm.Write(RequestByteArray, 0, RequestByteArray.Length); stm.Close();
                stm.Close();
 FtpWebResponse FtpResponse = (FtpWebResponse)FtpRequest.GetResponse();
                FtpWebResponse FtpResponse = (FtpWebResponse)FtpRequest.GetResponse(); if (FtpResponse.StatusCode == FtpStatusCode.ClosingData)
                if (FtpResponse.StatusCode == FtpStatusCode.ClosingData)
 
                 {
{ FtpResponse.Close();
                    FtpResponse.Close(); FileInfo FI = new FileInfo(SrcFilePath);
                    FileInfo FI = new FileInfo(SrcFilePath);
 if (GetFtpFileSize(BaseUriStr, AimUriStr, UserName, UserPwd) == FI.Length)
                    if (GetFtpFileSize(BaseUriStr, AimUriStr, UserName, UserPwd) == FI.Length)
 
                     {
{ return true;
                        return true; }
                    } else
                    else
 
                     {
{ return false;
                        return false; }
                    } }
                } else
                else
 
                 {
{ FtpResponse.Close();
                    FtpResponse.Close(); return false;
                    return false; }
                } }
            } catch (WebException e)
            catch (WebException e)
 
             {
{ FtpWebResponse FtpResponse = (FtpWebResponse)e.Response;
                FtpWebResponse FtpResponse = (FtpWebResponse)e.Response; FtpResponse.Close();
                FtpResponse.Close();
 return false;
                return false; }
            } }
        }
 /**//// <summary>
        /**//// <summary> /// 获取文件尺寸
        /// 获取文件尺寸 /// 返回文件字节数
        /// 返回文件字节数 /// </summary>
        /// </summary> /// <param name="BaseUriStr">基Uri字符串,如ftp://192.168.1.190:21</param>
        /// <param name="BaseUriStr">基Uri字符串,如ftp://192.168.1.190:21</param> /// <param name="AimUriStr">目标位置,相对路径:如/FTF/FTFDEL/K.pdf</param>
        /// <param name="AimUriStr">目标位置,相对路径:如/FTF/FTFDEL/K.pdf</param> /// <param name="UserName">用户名</param>
        /// <param name="UserName">用户名</param> /// <param name="UserPwd">用户密码</param>
        /// <param name="UserPwd">用户密码</param> /// <returns></returns>
        /// <returns></returns> public static int GetFtpFileSize(string BaseUriStr, string AimUriStr, string UserName, string UserPwd)
        public static int GetFtpFileSize(string BaseUriStr, string AimUriStr, string UserName, string UserPwd)
 
         {
{ Uri BaseUri = new Uri(BaseUriStr);
            Uri BaseUri = new Uri(BaseUriStr); Uri AimUri = new Uri(BaseUri, AimUriStr);
            Uri AimUri = new Uri(BaseUri, AimUriStr); FtpWebRequest FtpRequest = (FtpWebRequest)WebRequest.Create(AimUri);
            FtpWebRequest FtpRequest = (FtpWebRequest)WebRequest.Create(AimUri); FtpRequest.KeepAlive = true;
            FtpRequest.KeepAlive = true; FtpRequest.ReadWriteTimeout = 10000;
            FtpRequest.ReadWriteTimeout = 10000; FtpRequest.UsePassive = false;
            FtpRequest.UsePassive = false; NetworkCredential FtpCred = new NetworkCredential(UserName, UserPwd);
            NetworkCredential FtpCred = new NetworkCredential(UserName, UserPwd); CredentialCache FtpCache = new CredentialCache();
            CredentialCache FtpCache = new CredentialCache(); FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred);
            FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred); FtpRequest.Credentials = FtpCache;
            FtpRequest.Credentials = FtpCache; FtpRequest.Method = WebRequestMethods.Ftp.GetFileSize;
            FtpRequest.Method = WebRequestMethods.Ftp.GetFileSize;
 try
            try
 
             {
{ FtpWebResponse FtpResponse = (FtpWebResponse)FtpRequest.GetResponse();
                FtpWebResponse FtpResponse = (FtpWebResponse)FtpRequest.GetResponse(); long FileSize = FtpResponse.ContentLength;
                long FileSize = FtpResponse.ContentLength; FtpResponse.Close();
                FtpResponse.Close();
 return Convert.ToInt32(FileSize);
                return Convert.ToInt32(FileSize); }
            } catch
            catch
 
             {
{ return -1;
                return -1; }
            } }
        } #endregion
        #endregion

 文件重命名#region 文件重命名
        文件重命名#region 文件重命名
 /**//// <summary>
        /**//// <summary> /// 文件重命名、文件移动
        /// 文件重命名、文件移动 /// </summary>
        /// </summary> /// <param name="BaseUriStr">基Uri字符串,如ftp://192.168.1.190:21</param>
        /// <param name="BaseUriStr">基Uri字符串,如ftp://192.168.1.190:21</param> /// <param name="SrcUriStr">源位置,相对路径:如/FTF/FTFDEL/K.pdf</param>
        /// <param name="SrcUriStr">源位置,相对路径:如/FTF/FTFDEL/K.pdf</param> /// <param name="AimUriStr">目标位置,相对路径:如/FTF/FTFDEL/K.pdf</param>
        /// <param name="AimUriStr">目标位置,相对路径:如/FTF/FTFDEL/K.pdf</param> /// <param name="UserName">用户名</param>
        /// <param name="UserName">用户名</param> /// <param name="UserPwd">用户密码</param>
        /// <param name="UserPwd">用户密码</param> /// <returns></returns>
        /// <returns></returns> public static bool RenameFtpFile(string BaseUriStr, string SrcUriStr, string AimUriStr, string UserName, string UserPwd)
        public static bool RenameFtpFile(string BaseUriStr, string SrcUriStr, string AimUriStr, string UserName, string UserPwd)
 
         {
{ Uri BaseUri = new Uri(BaseUriStr);
            Uri BaseUri = new Uri(BaseUriStr); Uri AimUri = new Uri(BaseUri, SrcUriStr);
            Uri AimUri = new Uri(BaseUri, SrcUriStr); FtpWebRequest FtpRequest = (FtpWebRequest)WebRequest.Create(AimUri);
            FtpWebRequest FtpRequest = (FtpWebRequest)WebRequest.Create(AimUri); FtpRequest.KeepAlive = true;
            FtpRequest.KeepAlive = true; FtpRequest.ReadWriteTimeout = 10000;
            FtpRequest.ReadWriteTimeout = 10000; FtpRequest.UsePassive = false;
            FtpRequest.UsePassive = false; NetworkCredential FtpCred = new NetworkCredential(UserName, UserPwd);
            NetworkCredential FtpCred = new NetworkCredential(UserName, UserPwd); CredentialCache FtpCache = new CredentialCache();
            CredentialCache FtpCache = new CredentialCache(); FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred);
            FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred); FtpRequest.Credentials = FtpCache;
            FtpRequest.Credentials = FtpCache; FtpRequest.Method = WebRequestMethods.Ftp.Rename;
            FtpRequest.Method = WebRequestMethods.Ftp.Rename; FtpRequest.RenameTo = AimUriStr;
            FtpRequest.RenameTo = AimUriStr;
 try
            try
 
             {
{ FtpWebResponse FtpResponse = (FtpWebResponse)FtpRequest.GetResponse();
                FtpWebResponse FtpResponse = (FtpWebResponse)FtpRequest.GetResponse(); if (FtpResponse.StatusCode == FtpStatusCode.FileActionOK)
                if (FtpResponse.StatusCode == FtpStatusCode.FileActionOK)
 
                 {
{ return true;
                    return true; }
                } else
                else
 
                 {
{ return false;
                    return false; }
                } }
            } catch(WebException e)
            catch(WebException e)
 
             {
{ FtpWebResponse FtpResponse = (FtpWebResponse)e.Response;
                FtpWebResponse FtpResponse = (FtpWebResponse)e.Response; FtpResponse.Close();
                FtpResponse.Close(); return false;
                return false; }
            } }
        } #endregion
        #endregion }
    } }
}
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号