上传导ftp目录中 核心上传类来自csdn下载

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;

using System.Xml; using System.IO; using System.Net; using System.Net.Sockets; using System.Text.RegularExpressions; using System.Globalization;

namespace UpFile2Ftp {     public partial class Form1 : Form     {         #region 窗体事件 及 全局变量         /// <summary>         /// 全局变量 刷新服务运行参数 RefrashSetting rs         /// </summary>         RefrashSetting rs;

        clsFTP cf;

        /// <summary>         /// 全局变量 指示是否正在上传文件         /// </summary>         bool IsRunning = false;

        public Form1()         {             InitializeComponent();         }

        /// <summary>         /// 窗体初始化         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void Form1_Load(object sender, EventArgs e)         {             //得到原来的参数设置             rs = new RefrashSetting();             rs.refrash();             //初始化本窗体             Init();         }

        #endregion

        #region 窗体事件

        /// <summary>         /// 设置本地上传路径         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void Btn_SetDir_Click(object sender, EventArgs e)         {             if (folderBrowserDialog1.ShowDialog() != DialogResult.Cancel)             {                 textBox1.Text = folderBrowserDialog1.SelectedPath;             }         }

        /// <summary>         /// 设置ftp路径         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void Btn_SetFTP_Click(object sender, EventArgs e)         {             textBox2.ReadOnly = false;         }

        /// <summary>         /// 保存设置         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void Btn_Save_Click(object sender, EventArgs e)         {             bool _IsSucess = true;             //保存上传路径             _IsSucess = _IsSucess && SaveConfig("FileDirect", textBox1.Text.Trim(), Application.StartupPath + "//app.config");             _IsSucess = _IsSucess && SaveConfig("FTPDirect", textBox2.Text.Trim(), Application.StartupPath + "//app.config");

            //保存上传时间             _IsSucess = _IsSucess && SaveConfig("Hour", numericUpDownHour.Value.ToString(), Application.StartupPath + "//app.config");             _IsSucess = _IsSucess && SaveConfig("Minute", numericUpDownMinutes.Value.ToString(), Application.StartupPath + "//app.config");

            //保存日期             _IsSucess = _IsSucess && SaveConfig("Monday", Chk_Monday.Checked == true ? "1" : "0", Application.StartupPath + "//app.config");             _IsSucess = _IsSucess && SaveConfig("Tuesday", Chk_Tuesday.Checked == true ? "1" : "0", Application.StartupPath + "//app.config");             _IsSucess = _IsSucess && SaveConfig("Wednesday", Chk_Wednesday.Checked == true ? "1" : "0", Application.StartupPath + "//app.config");             _IsSucess = _IsSucess && SaveConfig("Thursday", Chk_Thursday.Checked == true ? "1" : "0", Application.StartupPath + "//app.config");             _IsSucess = _IsSucess && SaveConfig("Friday", Chk_Friday.Checked == true ? "1" : "0", Application.StartupPath + "//app.config");             _IsSucess = _IsSucess && SaveConfig("Saturday", Chk_Saturday.Checked == true ? "1" : "0", Application.StartupPath + "//app.config");             _IsSucess = _IsSucess && SaveConfig("Sunday", Chk_Sunday.Checked == true ? "1" : "0", Application.StartupPath + "//app.config");

            //保存用户名             _IsSucess = _IsSucess && SaveConfig("UserName", Txt_UserName.Text, Application.StartupPath + "//app.config");

            //更新参数             rs.refrash();             if (_IsSucess)             {                 MessageBox.Show(this, "保存完毕");             }             else             {                 MessageBox.Show(this, "保存失败,请联系管理员");             }         }

        /// <summary>         /// 启动服务         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void Btn_Start_Click(object sender, EventArgs e)         {             if (Btn_Start.Text == "启    动")             {                 //如果正在上传文件则不能停止服务                 if (IsRunning)                 {                     MessageBox.Show(this, "服务正在上传文件,暂停操作暂时不能执行!");                     return;                 }

                Btn_RunSelf.Enabled = false;                 PL_SET.Enabled = false;                 Btn_Start.Text = "暂    停";                 timer1.Start();             }             else             {                 Btn_RunSelf.Enabled = true;                 Btn_Start.Text = "启    动";                 PL_SET.Enabled = true;                 timer1.Stop();             }

        }

        //关闭最小化托盘         private void Form1_FormClosing(object sender, FormClosingEventArgs e)         {             if (WindowState == FormWindowState.Minimized)             {             }             else             {                 e.Cancel = true;                 WindowState = FormWindowState.Minimized;                 Visible = false;                 notifyIcon2.Visible = true;             }         }

        /// <summary>         /// 还原         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void ToolSt_Restory_Click(object sender, EventArgs e)         {             Visible = true;             WindowState = FormWindowState.Normal;             notifyIcon2.Visible = false;         }

        /// <summary>         /// 双击还原         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void notifyIcon2_MouseDoubleClick(object sender, MouseEventArgs e)         {             Visible = true;             WindowState = FormWindowState.Normal;             notifyIcon2.Visible = false;         }

        /// <summary>         /// 关闭         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void ToolStr_Exit_Click(object sender, EventArgs e)         {                //如果正在上传文件则不能停止服务             if (IsRunning)             {                 MessageBox.Show(this, "服务正在上传文件,暂停操作暂时不能执行!");                 return;             }

            Close();         }

        /// <summary>         /// 定时服务         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void timer1_Tick(object sender, EventArgs e)         {             //时间相符才能继续运行             if (DateTime.Now.Minute.ToString() == rs.Time_Minute && DateTime.Now.Hour.ToString() == rs.Time_Hour)             {

                //匹配运行的日期                 switch (DateTime.Today.DayOfWeek.ToString())                 {                     case "Monday":                         if (rs.Week_Monday == "1")                         {                             //                             UpFile2FTP();                         }                         break;                     case "Tuesday":                         if (rs.Week_Monday == "1")                         {                             //                             UpFile2FTP();                         }                         break;                     case "Wednesday":                         if (rs.Week_Monday == "1")                         {                             //                             UpFile2FTP();                         }                         break;                     case "Thursday":                         if (rs.Week_Monday == "1")                         {                             //                             UpFile2FTP();                         }                         break;                     case "Friday":                         if (rs.Week_Monday == "1")                         {                             //                             UpFile2FTP();                         }                         break;                     case "Saturday":                         if (rs.Week_Monday == "1")                         {                             //                             UpFile2FTP();                         }                         break;                     case "Sunday":                         if (rs.Week_Monday == "1")                         {                             //                             UpFile2FTP();                         }                         break;                     default: break;                 }             }         }

        /// <summary>         /// 手动执行         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void Btn_RunSelf_Click(object sender, EventArgs e)         {             if (MessageBox.Show(this, "您确定手动上传目录中的文件吗?","手动上传", MessageBoxButtons.YesNoCancel) == DialogResult.Yes)             {                 if (IsRunning)                 {                     MessageBox.Show(this, "正在上传文件中请稍候手动执行");                     return;                 }                 UpFile2FTP();             }         }         #endregion

        #region 公共函数

        #region 保存配置 SaveConfig(string configKey, string configValue, string _xmlPath)         /// <summary>         /// 保存配置         /// </summary>         /// <param name="configKey"></param>         /// <param name="configValue"></param>         /// <param name="_xmlPath"></param>         /// <returns></returns>         public bool SaveConfig(string configKey, string configValue, string _xmlPath)         {             try             {                 XmlDocument doc = new XmlDocument();                 doc.Load(_xmlPath);                 //找出名称为“add”的所有元素                 XmlNodeList nodes = doc.GetElementsByTagName("add");                 for (int i = 0; i < nodes.Count; i++)                 {                     //获得将当前元素的key属性                     XmlAttribute att = nodes[i].Attributes["key"];                     //根据元素的第一个属性来判断当前的元素是不是目标元素                     if (att.Value == "" + configKey + "")                     {                         //对目标元素中的第二个属性赋值                         att = nodes[i].Attributes["value"];                         att.Value = configValue;                         break;                     }                 }                 //保存上面的修改                 doc.Save(_xmlPath);                 return true;             }             catch (SystemException ex)             {                 StreamWriter sw;                 if (!File.Exists(Application.StartupPath + "//error.txt"))                 {                     sw = File.CreateText(Application.StartupPath + "//error.txt");                 }                 else                 {                     sw = File.AppendText(Application.StartupPath + "//error.txt");                 }

                sw.WriteLine(ex.Message);                 sw.Flush();                 sw.Close();                 return false;             }         }

        #endregion

        #region  窗体初始化 Init()         /// <summary>         /// 窗体初始化         /// </summary>         public void Init()         {             //初始化窗体日期             Chk_Monday.Checked = rs.Week_Monday == "1" ? true : false;             Chk_Tuesday.Checked = rs.Week_Tuesday == "1" ? true : false;             Chk_Wednesday.Checked = rs.Week_Wednesday == "1" ? true : false;             Chk_Thursday.Checked = rs.Week_Thursday == "1" ? true : false;             Chk_Friday.Checked = rs.Week_Friday == "1" ? true : false;             Chk_Saturday.Checked = rs.Week_Saturday == "1" ? true : false;             Chk_Sunday.Checked = rs.Week_Sunday == "1" ? true : false;

            //初始化窗体日期             numericUpDownHour.Value = Convert.ToDecimal(rs.Time_Hour);             numericUpDownMinutes.Value = Convert.ToDecimal(rs.Time_Minute);

            //初始化路径             textBox1.Text = rs.Path_FileDirect;             textBox2.Text = rs.Path_FTPDirect;

            //初始化用户名             Txt_UserName.Text = rs.User_UserName;         }         #endregion

        #region 上传文件相关操作  得到本地文件夹目录下所有文件(只遍历一级目录) FileInfo [] UpFiles(string _FilesPath)

        /// <summary>         /// 得到上传的文件地址列表         /// </summary>         /// <param name="_FilesPath">上传目录地址</param>         /// <returns></returns>         FileInfo[] UpFiles(string _FilesPath)         {             System.IO.DirectoryInfo _FileDirect = new DirectoryInfo(_FilesPath);

            //判断是否有此目录             if (!_FileDirect.Exists)             {                 return null;             }             return _FileDirect.GetFiles();         }

        #endregion

        #region 上传文件相关操作 上传文件 public void UpFile2FTP()

        /// <summary>         /// 上传文件         /// </summary>         public void UpFile2FTP()         {             IsRunning = true;             ToolScript_Des.Text = "正在上传文件,请等待...";             label4.Text = "正在上传文件,请等待...";             cf = new clsFTP(new Uri(rs.Path_FTPDirect), rs.User_UserName, this.TxtPassword.Text.Trim());             //绑定事件             cf.UploadProgressChanged += new clsFTP.De_UploadProgressChanged(cf_UploadProgressChanged);             cf.UploadFileCompleted += new clsFTP.De_UploadFileCompleted(cf_UploadFileCompleted);

            FileInfo[] _UpFiles = UpFiles(rs.Path_FileDirect);

            label4.Text = "共需上传 " + _UpFiles.Count().ToString() + " 个文件" ;

            foreach (FileInfo item in _UpFiles)             {                 cf.UploadFileAsync(rs.Path_FileDirect + "//" + item.Name, true);  //调用异步传输,若有文件存在则覆盖。              }

            label4.Text = "共有 " + _UpFiles.Count().ToString() + " 个文件需要上传 成功 "  + _UpFiles.Count().ToString() + " 个";             IsRunning = false;             cf.UploadProgressChanged -= new clsFTP.De_UploadProgressChanged(cf_UploadProgressChanged);             cf.UploadFileCompleted -= new clsFTP.De_UploadFileCompleted(cf_UploadFileCompleted);         }

        /// <summary>         /// 反映上传进度         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         public void cf_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e)         {             this.progressBar1.Maximum = (int)e.TotalBytesToSend;             this.progressBar1.Value = (int)e.BytesSent;             label4.Text += string.Format("文件总大小:{0}k,已经上传: {1}k。", e.TotalBytesToSend / 1024, e.BytesSent / 1024);         }

        public void cf_UploadFileCompleted(object sender, UploadFileCompletedEventArgs e)         {             try             {                 label4.Text = "无法连接到服务器,或者用户登陆失败!";                 label4.Text = e.Error.Message.ToString();             }             catch             {                 //label4.Text = "正在上传第" + _UpFiles.Count().ToString() + " 个文件 :" + item.Name;                 label4.Text = "上传完成!";                 progressBar1.Value = 0;             }         }

        #endregion

        #endregion     }

    #region 参数管理 class RefrashSetting     /// <summary>     /// 参数管理     /// </summary>     public class RefrashSetting     {         #region 日期变量及相关属性

        string _Monday = "";         string _Tuesday = "";         string _Wednesday = "";         string _Thursday = "";         string _Friday = "";         string _Saturday = "";         string _Sunday = "";

        public string Week_Monday         {             get             {                 return _Monday;             }         }

        public string Week_Tuesday         {             get             {                 return _Tuesday;             }         }

        public string Week_Wednesday         {             get             {                 return _Wednesday;             }         }

        public string Week_Thursday         {             get             {                 return _Thursday;             }         }

        public string Week_Friday         {             get             {                 return _Friday;             }         }

        public string Week_Saturday         {             get             {                 return _Saturday;             }         }

        public string Week_Sunday         {             get             {                 return _Sunday;             }         }         #endregion

        #region 时间变量及相关属性         string _Hour = "";         string _Minute = "";

        public string Time_Hour         {             get             {                 return _Hour;             }         }

        public string Time_Minute         {             get             {                 return _Minute;             }         }

        #endregion

        #region 路径设置及相关属性

        string _FileDirect = "";         string _FTPDirect = "";

        public string Path_FileDirect         {             get             {                 return _FileDirect;             }         }

        public string Path_FTPDirect         {             get             {                 return _FTPDirect;             }         }

        #endregion

        #region 用户名设置及相关属性         string _UserName = "";

        public string User_UserName         {             get             {                 return _UserName;             }         }         #endregion

        #region 公共方法         /// <summary>         /// 更新服务运行参数         /// </summary>         public void refrash()         {             //更新日期             _Monday = System.Configuration.ConfigurationSettings.AppSettings["Monday"].ToString();             _Tuesday = System.Configuration.ConfigurationSettings.AppSettings["Tuesday"].ToString();             _Wednesday = System.Configuration.ConfigurationSettings.AppSettings["Wednesday"].ToString();             _Thursday = System.Configuration.ConfigurationSettings.AppSettings["Thursday"].ToString();             _Friday = System.Configuration.ConfigurationSettings.AppSettings["Friday"].ToString();             _Saturday = System.Configuration.ConfigurationSettings.AppSettings["Saturday"].ToString();             _Sunday = System.Configuration.ConfigurationSettings.AppSettings["Sunday"].ToString();

            //更新时间             _Hour = System.Configuration.ConfigurationSettings.AppSettings["Hour"].ToString();             _Minute = System.Configuration.ConfigurationSettings.AppSettings["Minute"].ToString();

            //更新路径             _FileDirect = System.Configuration.ConfigurationSettings.AppSettings["FileDirect"].ToString();             _FTPDirect = System.Configuration.ConfigurationSettings.AppSettings["FTPDirect"].ToString();

            //更新用户名             _UserName = System.Configuration.ConfigurationSettings.AppSettings["UserName"].ToString();

        }         #endregion

    }     #endregion

    #region 上传文件类     /**/     /// <summary>     /// FTP处理操作类     /// 功能:     /// 下载文件     /// 上传文件     /// 上传文件的进度信息     /// 下载文件的进度信息     /// 删除文件     /// 列出文件     /// 列出目录     /// 进入子目录     /// 退出当前目录返回上一层目录     /// 判断远程文件是否存在     /// 判断远程文件是否存在     /// 删除远程文件        /// 建立目录     /// 删除目录     /// 文件(目录)改名

    #region 文件信息结构     public struct FileStruct     {         public string Flags;         public string Owner;         public string Group;         public bool IsDirectory;         public DateTime CreateTime;         public string Name;     }     public enum FileListStyle     {         UnixStyle,         WindowsStyle,         Unknown     }     #endregion     public class clsFTP     {

        #region 属性信息         /**/         /// <summary>         /// FTP请求对象         /// </summary>         FtpWebRequest Request = null;         /**/         /// <summary>         /// FTP响应对象         /// </summary>         FtpWebResponse Response = null;         /**/         /// <summary>         /// FTP服务器地址         /// </summary>         private Uri _Uri;         /**/         /// <summary>         /// FTP服务器地址         /// </summary>         public Uri Uri         {             get             {                 if (_DirectoryPath == "/")                 {                     return _Uri;                 }                 else                 {                     string strUri = _Uri.ToString();                     if (strUri.EndsWith("/"))                     {                         strUri = strUri.Substring(0, strUri.Length - 1);                     }                     return new Uri(strUri + this.DirectoryPath);                 }             }             set             {                 if (value.Scheme != Uri.UriSchemeFtp)                 {                     throw new Exception("Ftp 地址格式错误!");                 }                 _Uri = new Uri(value.GetLeftPart(UriPartial.Authority));                 _DirectoryPath = value.AbsolutePath;                 if (!_DirectoryPath.EndsWith("/"))                 {                     _DirectoryPath += "/";                 }             }         }

        /**/         /// <summary>         /// 当前工作目录         /// </summary>         private string _DirectoryPath;

        /**/         /// <summary>         /// 当前工作目录         /// </summary>         public string DirectoryPath         {             get { return _DirectoryPath; }             set { _DirectoryPath = value; }         }

        /**/         /// <summary>         /// FTP登录用户         /// </summary>         private string _UserName;         /**/         /// <summary>         /// FTP登录用户         /// </summary>         public string UserName         {             get { return _UserName; }             set { _UserName = value; }         }

        /**/         /// <summary>         /// 错误信息         /// </summary>         private string _ErrorMsg;         /**/         /// <summary>         /// 错误信息         /// </summary>         public string ErrorMsg         {             get { return _ErrorMsg; }             set { _ErrorMsg = value; }         }

        /**/         /// <summary>         /// FTP登录密码         /// </summary>         private string _Password;         /**/         /// <summary>         /// FTP登录密码         /// </summary>         public string Password         {             get { return _Password; }             set { _Password = value; }         }

        /**/         /// <summary>         /// 连接FTP服务器的代理服务         /// </summary>         private WebProxy _Proxy = null;         /**/         /// <summary>         /// 连接FTP服务器的代理服务         /// </summary>         public WebProxy Proxy         {             get             {                 return _Proxy;             }             set             {                 _Proxy = value;             }         }

        /**/         /// <summary>         /// 是否需要删除临时文件         /// </summary>         private bool _isDeleteTempFile = false;         /**/         /// <summary>         /// 异步上传所临时生成的文件         /// </summary>         private string _UploadTempFile = "";         #endregion

        #region 事件         public delegate void De_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e);         public delegate void De_DownloadDataCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e);         public delegate void De_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e);         public delegate void De_UploadFileCompleted(object sender, UploadFileCompletedEventArgs e);

        /**/         /// <summary>         /// 异步下载进度发生改变触发的事件         /// </summary>         public event De_DownloadProgressChanged DownloadProgressChanged;         /**/         /// <summary>         /// 异步下载文件完成之后触发的事件         /// </summary>         public event De_DownloadDataCompleted DownloadDataCompleted;         /**/         /// <summary>         /// 异步上传进度发生改变触发的事件         /// </summary>         public event De_UploadProgressChanged UploadProgressChanged;         /**/         /// <summary>         /// 异步上传文件完成之后触发的事件         /// </summary>         public event De_UploadFileCompleted UploadFileCompleted;         #endregion

        #region 构造析构函数         /**/         /// <summary>         /// 构造函数         /// </summary>         /// <param name="FtpUri">FTP地址</param>         /// <param name="strUserName">登录用户名</param>         /// <param name="strPassword">登录密码</param>         public clsFTP(Uri FtpUri, string strUserName, string strPassword)         {             this._Uri = new Uri(FtpUri.GetLeftPart(UriPartial.Authority));             _DirectoryPath = FtpUri.AbsolutePath;             if (!_DirectoryPath.EndsWith("/"))             {                 _DirectoryPath += "/";             }             this._UserName = strUserName;             this._Password = strPassword;             this._Proxy = null;         }         /**/         /// <summary>         /// 构造函数         /// </summary>         /// <param name="FtpUri">FTP地址</param>         /// <param name="strUserName">登录用户名</param>         /// <param name="strPassword">登录密码</param>         /// <param name="objProxy">连接代理</param>         public clsFTP(Uri FtpUri, string strUserName, string strPassword, WebProxy objProxy)         {             this._Uri = new Uri(FtpUri.GetLeftPart(UriPartial.Authority));             _DirectoryPath = FtpUri.AbsolutePath;             if (!_DirectoryPath.EndsWith("/"))             {                 _DirectoryPath += "/";             }             this._UserName = strUserName;             this._Password = strPassword;             this._Proxy = objProxy;         }         /**/         /// <summary>         /// 构造函数         /// </summary>         public clsFTP()         {             this._UserName = "anonymous";  //anonymous匿名用户             this._Password = "@anonymous";//@anonymous             this._Uri = null;             this._Proxy = null;         }

        /**/         /// <summary>         /// 析构函数         /// </summary>         ~clsFTP()         {             if (Response != null)             {                 Response.Close();                 Response = null;             }             if (Request != null)             {                 Request.Abort();                 Request = null;             }         }         #endregion

        #region 建立连接         /**/         /// <summary>         /// 建立FTP链接,返回响应对象         /// </summary>         /// <param name="uri">FTP地址</param>         /// <param name="FtpMathod">操作命令</param>         private FtpWebResponse Open(Uri uri, string FtpMathod)         {             try             {                 Request = (FtpWebRequest)WebRequest.Create(uri);                 Request.Method = FtpMathod;                 Request.UseBinary = true;                 Request.Credentials = new NetworkCredential(this.UserName, this.Password);                 if (this.Proxy != null)                 {                     Request.Proxy = this.Proxy;                 }                 return (FtpWebResponse)Request.GetResponse();             }             catch (Exception ep)             {                 ErrorMsg = ep.ToString();                 throw ep;             }         }         /**/         /// <summary>         /// 建立FTP链接,返回请求对象         /// </summary>         /// <param name="uri">FTP地址</param>         /// <param name="FtpMathod">操作命令</param>         private FtpWebRequest OpenRequest(Uri uri, string FtpMathod)         {             try             {                 Request = (FtpWebRequest)WebRequest.Create(uri);                 Request.Method = FtpMathod;                 Request.UseBinary = true;                 Request.Credentials = new NetworkCredential(this.UserName, this.Password);                 if (this.Proxy != null)                 {                     Request.Proxy = this.Proxy;                 }                 return Request;             }             catch (Exception ep)             {                 ErrorMsg = ep.ToString();                 throw ep;             }         }         #endregion

        #region 下载文件

        /**/         /// <summary>         /// 从FTP服务器下载文件,使用与远程文件同名的文件名来保存文件         /// </summary>         /// <param name="RemoteFileName">远程文件名</param>         /// <param name="LocalPath">本地路径</param>

        public bool DownloadFile(string RemoteFileName, string LocalPath)         {             return DownloadFile(RemoteFileName, LocalPath, RemoteFileName);         }         /**/         /// <summary>         /// 从FTP服务器下载文件,指定本地路径和本地文件名         /// </summary>         /// <param name="RemoteFileName">远程文件名</param>         /// <param name="LocalPath">本地路径</param>         /// <param name="LocalFilePath">保存文件的本地路径,后面带有"/"</param>         /// <param name="LocalFileName">保存本地的文件名</param>         public bool DownloadFile(string RemoteFileName, string LocalPath, string LocalFileName)         {             byte[] bt = null;             try             {                 if (!IsValidFileChars(RemoteFileName) || !IsValidFileChars(LocalFileName) || !IsValidPathChars(LocalPath))                 {                     throw new Exception("非法文件名或目录名!");                 }                 if (!Directory.Exists(LocalPath))                 {                     throw new Exception("本地文件路径不存在!");                 }

                string LocalFullPath = Path.Combine(LocalPath, LocalFileName);                 if (File.Exists(LocalFullPath))                 {                     throw new Exception("当前路径下已经存在同名文件!");                 }                 bt = DownloadFile(RemoteFileName);                 if (bt != null)                 {                     FileStream stream = new FileStream(LocalFullPath, FileMode.Create);                     stream.Write(bt, 0, bt.Length);                     stream.Flush();                     stream.Close();                     return true;                 }                 else                 {                     return false;                 }             }             catch (Exception ep)             {                 ErrorMsg = ep.ToString();                 throw ep;             }         }

        /**/         /// <summary>         /// 从FTP服务器下载文件,返回文件二进制数据         /// </summary>         /// <param name="RemoteFileName">远程文件名</param>         public byte[] DownloadFile(string RemoteFileName)         {             try             {                 if (!IsValidFileChars(RemoteFileName))                 {                     throw new Exception("非法文件名或目录名!");                 }                 Response = Open(new Uri(this.Uri.ToString() + RemoteFileName), WebRequestMethods.Ftp.DownloadFile);                 Stream Reader = Response.GetResponseStream();

                MemoryStream mem = new MemoryStream(1024 * 500);                 byte[] buffer = new byte[1024];                 int bytesRead = 0;                 int TotalByteRead = 0;                 while (true)                 {                     bytesRead = Reader.Read(buffer, 0, buffer.Length);                     TotalByteRead += bytesRead;                     if (bytesRead == 0)                         break;                     mem.Write(buffer, 0, bytesRead);                 }                 if (mem.Length > 0)                 {                     return mem.ToArray();                 }                 else                 {                     return null;                 }             }             catch (Exception ep)             {                 ErrorMsg = ep.ToString();                 throw ep;             }         }         #endregion

        #region 异步下载文件         /**/         /// <summary>         /// 从FTP服务器异步下载文件,指定本地路径和本地文件名         /// </summary>         /// <param name="RemoteFileName">远程文件名</param>                /// <param name="LocalPath">保存文件的本地路径,后面带有"/"</param>         /// <param name="LocalFileName">保存本地的文件名</param>         public void DownloadFileAsync(string RemoteFileName, string LocalPath, string LocalFileName)         {             byte[] bt = null;             try             {                 if (!IsValidFileChars(RemoteFileName) || !IsValidFileChars(LocalFileName) || !IsValidPathChars(LocalPath))                 {                     throw new Exception("非法文件名或目录名!");                 }                 if (!Directory.Exists(LocalPath))                 {                     throw new Exception("本地文件路径不存在!");                 }

                string LocalFullPath = Path.Combine(LocalPath, LocalFileName);                 if (File.Exists(LocalFullPath))                 {                     throw new Exception("当前路径下已经存在同名文件!");                 }                 DownloadFileAsync(RemoteFileName, LocalFullPath);

            }             catch (Exception ep)             {                 ErrorMsg = ep.ToString();                 throw ep;             }         }

        /**/         /// <summary>         /// 从FTP服务器异步下载文件,指定本地完整路径文件名         /// </summary>         /// <param name="RemoteFileName">远程文件名</param>         /// <param name="LocalFullPath">本地完整路径文件名</param>         public void DownloadFileAsync(string RemoteFileName, string LocalFullPath)         {             try             {                 if (!IsValidFileChars(RemoteFileName))                 {                     throw new Exception("非法文件名或目录名!");                 }                 if (File.Exists(LocalFullPath))                 {                     throw new Exception("当前路径下已经存在同名文件!");                 }                 MyWebClient client = new MyWebClient();

                client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);                 client.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(client_DownloadFileCompleted);                 client.Credentials = new NetworkCredential(this.UserName, this.Password);                 if (this.Proxy != null)                 {                     client.Proxy = this.Proxy;                 }                 client.DownloadFileAsync(new Uri(this.Uri.ToString() + RemoteFileName), LocalFullPath);             }             catch (Exception ep)             {                 ErrorMsg = ep.ToString();                 throw ep;             }         }

        /**/         /// <summary>         /// 异步下载文件完成之后触发的事件         /// </summary>         /// <param name="sender">下载对象</param>         /// <param name="e">数据信息对象</param>         void client_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)         {             if (DownloadDataCompleted != null)             {                 DownloadDataCompleted(sender, e);             }         }

        /**/         /// <summary>         /// 异步下载进度发生改变触发的事件         /// </summary>         /// <param name="sender">下载对象</param>         /// <param name="e">进度信息对象</param>         void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)         {             if (DownloadProgressChanged != null)             {                 DownloadProgressChanged(sender, e);             }         }         #endregion

        #region 上传文件         /**/         /// <summary>         /// 上传文件到FTP服务器         /// </summary>         /// <param name="LocalFullPath">本地带有完整路径的文件名</param>         public bool UploadFile(string LocalFullPath)         {             return UploadFile(LocalFullPath, Path.GetFileName(LocalFullPath), false);         }         /**/         /// <summary>         /// 上传文件到FTP服务器         /// </summary>         /// <param name="LocalFullPath">本地带有完整路径的文件</param>         /// <param name="OverWriteRemoteFile">是否覆盖远程服务器上面同名的文件</param>         public bool UploadFile(string LocalFullPath, bool OverWriteRemoteFile)         {             return UploadFile(LocalFullPath, Path.GetFileName(LocalFullPath), OverWriteRemoteFile);         }         /**/         /// <summary>         /// 上传文件到FTP服务器         /// </summary>         /// <param name="LocalFullPath">本地带有完整路径的文件</param>         /// <param name="RemoteFileName">要在FTP服务器上面保存文件名</param>         public bool UploadFile(string LocalFullPath, string RemoteFileName)         {             return UploadFile(LocalFullPath, RemoteFileName, false);         }         /**/         /// <summary>         /// 上传文件到FTP服务器         /// </summary>         /// <param name="LocalFullPath">本地带有完整路径的文件名</param>         /// <param name="RemoteFileName">要在FTP服务器上面保存文件名</param>         /// <param name="OverWriteRemoteFile">是否覆盖远程服务器上面同名的文件</param>         public bool UploadFile(string LocalFullPath, string RemoteFileName, bool OverWriteRemoteFile)         {             try             {                 if (!IsValidFileChars(RemoteFileName) || !IsValidFileChars(Path.GetFileName(LocalFullPath)) || !IsValidPathChars(Path.GetDirectoryName(LocalFullPath)))                 {                     throw new Exception("非法文件名或目录名!");                 }                 if (File.Exists(LocalFullPath))                 {                     FileStream Stream = new FileStream(LocalFullPath, FileMode.Open, FileAccess.Read);                     byte[] bt = new byte[Stream.Length];                     Stream.Read(bt, 0, (Int32)Stream.Length);   //注意,因为Int32的最大限制,最大上传文件只能是大约2G多一点                     Stream.Close();                     return UploadFile(bt, RemoteFileName, OverWriteRemoteFile);                 }                 else                 {                     throw new Exception("本地文件不存在!");                 }             }             catch (Exception ep)             {                 ErrorMsg = ep.ToString();                 throw ep;             }         }         /**/         /// <summary>         /// 上传文件到FTP服务器         /// </summary>         /// <param name="FileBytes">上传的二进制数据</param>         /// <param name="RemoteFileName">要在FTP服务器上面保存文件名</param>         public bool UploadFile(byte[] FileBytes, string RemoteFileName)         {             if (!IsValidFileChars(RemoteFileName))             {                 throw new Exception("非法文件名或目录名!");             }             return UploadFile(FileBytes, RemoteFileName, false);         }         /**/         /// <summary>         /// 上传文件到FTP服务器         /// </summary>         /// <param name="FileBytes">文件二进制内容</param>         /// <param name="RemoteFileName">要在FTP服务器上面保存文件名</param>         /// <param name="OverWriteRemoteFile">是否覆盖远程服务器上面同名的文件</param>         public bool UploadFile(byte[] FileBytes, string RemoteFileName, bool OverWriteRemoteFile)         {             try             {                 if (!IsValidFileChars(RemoteFileName))                 {                     throw new Exception("非法文件名!");                 }                 if (!OverWriteRemoteFile && FileExist(RemoteFileName))                 {                     throw new Exception("FTP服务上面已经存在同名文件!");                 }                 Response = Open(new Uri(this.Uri.ToString() + RemoteFileName), WebRequestMethods.Ftp.UploadFile);                 Stream requestStream = Request.GetRequestStream();                 MemoryStream mem = new MemoryStream(FileBytes);

                byte[] buffer = new byte[1024];                 int bytesRead = 0;                 int TotalRead = 0;                 while (true)                 {                     bytesRead = mem.Read(buffer, 0, buffer.Length);                     if (bytesRead == 0)                         break;                     TotalRead += bytesRead;                     requestStream.Write(buffer, 0, bytesRead);                 }                 requestStream.Close();                 Response = (FtpWebResponse)Request.GetResponse();                 mem.Close();                 mem.Dispose();                 FileBytes = null;                 return true;             }             catch (Exception ep)             {                 ErrorMsg = ep.ToString();                 throw ep;             }         }         #endregion

        #region 异步上传文件         /**/         /// <summary>         /// 异步上传文件到FTP服务器         /// </summary>         /// <param name="LocalFullPath">本地带有完整路径的文件名</param>         public void UploadFileAsync(string LocalFullPath)         {             UploadFileAsync(LocalFullPath, Path.GetFileName(LocalFullPath), false);         }         /**/         /// <summary>         /// 异步上传文件到FTP服务器         /// </summary>         /// <param name="LocalFullPath">本地带有完整路径的文件</param>         /// <param name="OverWriteRemoteFile">是否覆盖远程服务器上面同名的文件</param>         public void UploadFileAsync(string LocalFullPath, bool OverWriteRemoteFile)         {             UploadFileAsync(LocalFullPath, Path.GetFileName(LocalFullPath), OverWriteRemoteFile);         }         /**/         /// <summary>         /// 异步上传文件到FTP服务器         /// </summary>         /// <param name="LocalFullPath">本地带有完整路径的文件</param>         /// <param name="RemoteFileName">要在FTP服务器上面保存文件名</param>         public void UploadFileAsync(string LocalFullPath, string RemoteFileName)         {             UploadFileAsync(LocalFullPath, RemoteFileName, false);         }         /**/         /// <summary>         /// 异步上传文件到FTP服务器         /// </summary>         /// <param name="LocalFullPath">本地带有完整路径的文件名</param>         /// <param name="RemoteFileName">要在FTP服务器上面保存文件名</param>         /// <param name="OverWriteRemoteFile">是否覆盖远程服务器上面同名的文件</param>         public void UploadFileAsync(string LocalFullPath, string RemoteFileName, bool OverWriteRemoteFile)         {             try             {                 if (!IsValidFileChars(RemoteFileName) || !IsValidFileChars(Path.GetFileName(LocalFullPath)) || !IsValidPathChars(Path.GetDirectoryName(LocalFullPath)))                 {                     throw new Exception("非法文件名或目录名!");                 }                 if (!OverWriteRemoteFile && FileExist(RemoteFileName))                 {                     throw new Exception("FTP服务上面已经存在同名文件!");                 }                 if (File.Exists(LocalFullPath))                 {                     MyWebClient client = new MyWebClient();

                    client.UploadProgressChanged += new UploadProgressChangedEventHandler(client_UploadProgressChanged);                     client.UploadFileCompleted += new UploadFileCompletedEventHandler(client_UploadFileCompleted);                     client.Credentials = new NetworkCredential(this.UserName, this.Password);                     if (this.Proxy != null)                     {                         client.Proxy = this.Proxy;                     }                     client.UploadFileAsync(new Uri(this.Uri.ToString() + RemoteFileName), LocalFullPath);

                }                 else                 {                     throw new Exception("本地文件不存在!");                 }             }             catch (Exception ep)             {                 ErrorMsg = ep.ToString();                 throw ep;             }         }         /**/         /// <summary>         /// 异步上传文件到FTP服务器         /// </summary>         /// <param name="FileBytes">上传的二进制数据</param>         /// <param name="RemoteFileName">要在FTP服务器上面保存文件名</param>         public void UploadFileAsync(byte[] FileBytes, string RemoteFileName)         {             if (!IsValidFileChars(RemoteFileName))             {                 throw new Exception("非法文件名或目录名!");             }             UploadFileAsync(FileBytes, RemoteFileName, false);         }         /**/         /// <summary>         /// 异步上传文件到FTP服务器         /// </summary>         /// <param name="FileBytes">文件二进制内容</param>         /// <param name="RemoteFileName">要在FTP服务器上面保存文件名</param>         /// <param name="OverWriteRemoteFile">是否覆盖远程服务器上面同名的文件</param>         public void UploadFileAsync(byte[] FileBytes, string RemoteFileName, bool OverWriteRemoteFile)         {             try             {

                if (!IsValidFileChars(RemoteFileName))                 {                     throw new Exception("非法文件名!");                 }                 if (!OverWriteRemoteFile && FileExist(RemoteFileName))                 {                     throw new Exception("FTP服务上面已经存在同名文件!");                 }                 string TempPath = System.Environment.GetFolderPath(Environment.SpecialFolder.Templates);                 if (!TempPath.EndsWith("//"))                 {                     TempPath += "//";                 }                 string TempFile = TempPath + Path.GetRandomFileName();                 TempFile = Path.ChangeExtension(TempFile, Path.GetExtension(RemoteFileName));                 FileStream Stream = new FileStream(TempFile, FileMode.CreateNew, FileAccess.Write);                 Stream.Write(FileBytes, 0, FileBytes.Length);   //注意,因为Int32的最大限制,最大上传文件只能是大约2G多一点                 Stream.Flush();                 Stream.Close();                 Stream.Dispose();                 _isDeleteTempFile = true;                 _UploadTempFile = TempFile;                 FileBytes = null;                 UploadFileAsync(TempFile, RemoteFileName, OverWriteRemoteFile);

 

            }             catch (Exception ep)             {                 ErrorMsg = ep.ToString();                 throw ep;             }         }

        /**/         /// <summary>         /// 异步上传文件完成之后触发的事件         /// </summary>         /// <param name="sender">下载对象</param>         /// <param name="e">数据信息对象</param>         void client_UploadFileCompleted(object sender, UploadFileCompletedEventArgs e)         {             if (_isDeleteTempFile)             {                 if (File.Exists(_UploadTempFile))                 {                     File.SetAttributes(_UploadTempFile, FileAttributes.Normal);                     File.Delete(_UploadTempFile);                 }                 _isDeleteTempFile = false;             }             if (UploadFileCompleted != null)             {                 UploadFileCompleted(sender, e);             }         }

        /**/         /// <summary>         /// 异步上传进度发生改变触发的事件         /// </summary>         /// <param name="sender">下载对象</param>         /// <param name="e">进度信息对象</param>         void client_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e)         {             if (UploadProgressChanged != null)             {                 UploadProgressChanged(sender, e);             }         }         #endregion

        #region 列出目录文件信息         /**/         /// <summary>         /// 列出FTP服务器上面当前目录的所有文件和目录         /// </summary>         public FileStruct[] ListFilesAndDirectories()         {             Response = Open(this.Uri, WebRequestMethods.Ftp.ListDirectoryDetails);             StreamReader stream = new StreamReader(Response.GetResponseStream(), Encoding.Default);             string Datastring = stream.ReadToEnd();             FileStruct[] list = GetList(Datastring);             return list;         }         /**/         /// <summary>         /// 列出FTP服务器上面当前目录的所有文件         /// </summary>         public FileStruct[] ListFiles()         {             FileStruct[] listAll = ListFilesAndDirectories();             List<FileStruct> listFile = new List<FileStruct>();             foreach (FileStruct file in listAll)             {                 if (!file.IsDirectory)                 {                     listFile.Add(file);                 }             }             return listFile.ToArray();         }

        /**/         /// <summary>         /// 列出FTP服务器上面当前目录的所有的目录         /// </summary>         public FileStruct[] ListDirectories()         {             FileStruct[] listAll = ListFilesAndDirectories();             List<FileStruct> listDirectory = new List<FileStruct>();             foreach (FileStruct file in listAll)             {                 if (file.IsDirectory)                 {                     listDirectory.Add(file);                 }             }             return listDirectory.ToArray();         }         /**/         /// <summary>         /// 获得文件和目录列表         /// </summary>         /// <param name="datastring">FTP返回的列表字符信息</param>         private FileStruct[] GetList(string datastring)         {             List<FileStruct> myListArray = new List<FileStruct>();             string[] dataRecords = datastring.Split('/n');             FileListStyle _directoryListStyle = GuessFileListStyle(dataRecords);             foreach (string s in dataRecords)             {                 if (_directoryListStyle != FileListStyle.Unknown && s != "")                 {                     FileStruct f = new FileStruct();                     f.Name = "..";                     switch (_directoryListStyle)                     {                         case FileListStyle.UnixStyle:                             f = ParseFileStructFromUnixStyleRecord(s);                             break;                         case FileListStyle.WindowsStyle:                             f = ParseFileStructFromWindowsStyleRecord(s);                             break;                     }                     if (!(f.Name == "." || f.Name == ".."))                     {                         myListArray.Add(f);                     }                 }             }             return myListArray.ToArray();         }

        /**/         /// <summary>         /// 从Windows格式中返回文件信息         /// </summary>         /// <param name="Record">文件信息</param>         private FileStruct ParseFileStructFromWindowsStyleRecord(string Record)         {             FileStruct f = new FileStruct();             string processstr = Record.Trim();             string dateStr = processstr.Substring(0, 8);             processstr = (processstr.Substring(8, processstr.Length - 8)).Trim();             string timeStr = processstr.Substring(0, 7);             processstr = (processstr.Substring(7, processstr.Length - 7)).Trim();             DateTimeFormatInfo myDTFI = new CultureInfo("en-US", false).DateTimeFormat;             myDTFI.ShortTimePattern = "t";             f.CreateTime = DateTime.Parse(dateStr + " " + timeStr, myDTFI);             if (processstr.Substring(0, 5) == "<DIR>")             {                 f.IsDirectory = true;                 processstr = (processstr.Substring(5, processstr.Length - 5)).Trim();             }             else             {                 string[] strs = processstr.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);   // true);                 processstr = strs[1];                 f.IsDirectory = false;             }             f.Name = processstr;             return f;         }

        /**/         /// <summary>         /// 判断文件列表的方式Window方式还是Unix方式         /// </summary>         /// <param name="recordList">文件信息列表</param>         private FileListStyle GuessFileListStyle(string[] recordList)         {             foreach (string s in recordList)             {                 if (s.Length > 10                  && Regex.IsMatch(s.Substring(0, 10), "(-|d)(-|r)(-|w)(-|x)(-|r)(-|w)(-|x)(-|r)(-|w)(-|x)"))                 {                     return FileListStyle.UnixStyle;                 }                 else if (s.Length > 8                  && Regex.IsMatch(s.Substring(0, 8), "[0-9][0-9]-[0-9][0-9]-[0-9][0-9]"))                 {                     return FileListStyle.WindowsStyle;                 }             }             return FileListStyle.Unknown;         }

        /**/         /// <summary>         /// 从Unix格式中返回文件信息         /// </summary>         /// <param name="Record">文件信息</param>         private FileStruct ParseFileStructFromUnixStyleRecord(string Record)         {             FileStruct f = new FileStruct();             string processstr = Record.Trim();             f.Flags = processstr.Substring(0, 10);             f.IsDirectory = (f.Flags[0] == 'd');             processstr = (processstr.Substring(11)).Trim();             _cutSubstringFromStringWithTrim(ref processstr, ' ', 0);   //跳过一部分             f.Owner = _cutSubstringFromStringWithTrim(ref processstr, ' ', 0);             f.Group = _cutSubstringFromStringWithTrim(ref processstr, ' ', 0);             _cutSubstringFromStringWithTrim(ref processstr, ' ', 0);   //跳过一部分             string yearOrTime = processstr.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[2];             if (yearOrTime.IndexOf(":") >= 0)  //time             {                 processstr = processstr.Replace(yearOrTime, DateTime.Now.Year.ToString());             }             f.CreateTime = DateTime.Parse(_cutSubstringFromStringWithTrim(ref processstr, ' ', 8));             f.Name = processstr;   //最后就是名称             return f;         }

        /**/         /// <summary>         /// 按照一定的规则进行字符串截取         /// </summary>         /// <param name="s">截取的字符串</param>         /// <param name="c">查找的字符</param>         /// <param name="startIndex">查找的位置</param>         private string _cutSubstringFromStringWithTrim(ref string s, char c, int startIndex)         {             int pos1 = s.IndexOf(c, startIndex);             string retString = s.Substring(0, pos1);             s = (s.Substring(pos1)).Trim();             return retString;         }         #endregion

        #region 目录或文件存在的判断         /**/         /// <summary>         /// 判断当前目录下指定的子目录是否存在         /// </summary>         /// <param name="RemoteDirectoryName">指定的目录名</param>         public bool DirectoryExist(string RemoteDirectoryName)         {             try             {                 if (!IsValidPathChars(RemoteDirectoryName))                 {                     throw new Exception("目录名非法!");                 }                 FileStruct[] listDir = ListDirectories();                 foreach (FileStruct dir in listDir)                 {                     if (dir.Name == RemoteDirectoryName)                     {                         return true;                     }                 }                 return false;             }             catch (Exception ep)             {                 ErrorMsg = ep.ToString();                 throw ep;             }         }         /**/         /// <summary>         /// 判断一个远程文件是否存在服务器当前目录下面         /// </summary>         /// <param name="RemoteFileName">远程文件名</param>         public bool FileExist(string RemoteFileName)         {             try             {                 if (!IsValidFileChars(RemoteFileName))                 {                     throw new Exception("文件名非法!");                 }                 FileStruct[] listFile = ListFiles();                 foreach (FileStruct file in listFile)                 {                     if (file.Name == RemoteFileName)                     {                         return true;                     }                 }                 return false;             }             catch (Exception ep)             {                 ErrorMsg = ep.ToString();                 throw ep;             }         }         #endregion

        #region 删除文件         /**/         /// <summary>         /// 从FTP服务器上面删除一个文件         /// </summary>         /// <param name="RemoteFileName">远程文件名</param>         public void DeleteFile(string RemoteFileName)         {             try             {                 if (!IsValidFileChars(RemoteFileName))                 {                     throw new Exception("文件名非法!");                 }                 Response = Open(new Uri(this.Uri.ToString() + RemoteFileName), WebRequestMethods.Ftp.DeleteFile);             }             catch (Exception ep)             {                 ErrorMsg = ep.ToString();                 throw ep;             }         }         #endregion

        #region 重命名文件         /**/         /// <summary>         /// 更改一个文件的名称或一个目录的名称         /// </summary>         /// <param name="RemoteFileName">原始文件或目录名称</param>         /// <param name="NewFileName">新的文件或目录的名称</param>         public bool ReName(string RemoteFileName, string NewFileName)         {             try             {                 if (!IsValidFileChars(RemoteFileName) || !IsValidFileChars(NewFileName))                 {                     throw new Exception("文件名非法!");                 }                 if (RemoteFileName == NewFileName)                 {                     return true;                 }                 if (FileExist(RemoteFileName))                 {                     Request = OpenRequest(new Uri(this.Uri.ToString() + RemoteFileName), WebRequestMethods.Ftp.Rename);                     Request.RenameTo = NewFileName;                     Response = (FtpWebResponse)Request.GetResponse();

                }                 else                 {                     throw new Exception("文件在服务器上不存在!");                 }                 return true;             }             catch (Exception ep)             {                 ErrorMsg = ep.ToString();                 throw ep;             }         }         #endregion

        #region 拷贝、移动文件         /**/         /// <summary>         /// 把当前目录下面的一个文件拷贝到服务器上面另外的目录中,注意,拷贝文件之后,当前工作目录还是文件原来所在的目录         /// </summary>         /// <param name="RemoteFile">当前目录下的文件名</param>         /// <param name="DirectoryName">新目录名称。         /// 说明:如果新目录是当前目录的子目录,则直接指定子目录。如: SubDirectory1/SubDirectory2 ;         /// 如果新目录不是当前目录的子目录,则必须从根目录一级一级的指定。如: ./NewDirectory/SubDirectory1/SubDirectory2         /// </param>         /// <returns></returns>         public bool CopyFileToAnotherDirectory(string RemoteFile, string DirectoryName)         {             string CurrentWorkDir = this.DirectoryPath;             try             {                 byte[] bt = DownloadFile(RemoteFile);                 GotoDirectory(DirectoryName);                 bool Success = UploadFile(bt, RemoteFile, false);                 this.DirectoryPath = CurrentWorkDir;                 return Success;             }             catch (Exception ep)             {                 this.DirectoryPath = CurrentWorkDir;                 ErrorMsg = ep.ToString();                 throw ep;             }         }         /**/         /// <summary>         /// 把当前目录下面的一个文件移动到服务器上面另外的目录中,注意,移动文件之后,当前工作目录还是文件原来所在的目录         /// </summary>         /// <param name="RemoteFile">当前目录下的文件名</param>         /// <param name="DirectoryName">新目录名称。         /// 说明:如果新目录是当前目录的子目录,则直接指定子目录。如: SubDirectory1/SubDirectory2 ;         /// 如果新目录不是当前目录的子目录,则必须从根目录一级一级的指定。如: ./NewDirectory/SubDirectory1/SubDirectory2         /// </param>         /// <returns></returns>         public bool MoveFileToAnotherDirectory(string RemoteFile, string DirectoryName)         {             string CurrentWorkDir = this.DirectoryPath;             try             {                 if (DirectoryName == "")                     return false;                 if (!DirectoryName.StartsWith("/"))                     DirectoryName = "/" + DirectoryName;                 if (!DirectoryName.EndsWith("/"))                     DirectoryName += "/";                 bool Success = ReName(RemoteFile, DirectoryName + RemoteFile);                 this.DirectoryPath = CurrentWorkDir;                 return Success;             }             catch (Exception ep)             {                 this.DirectoryPath = CurrentWorkDir;                 ErrorMsg = ep.ToString();                 throw ep;             }         }         #endregion

        #region 建立、删除子目录         /**/         /// <summary>         /// 在FTP服务器上当前工作目录建立一个子目录         /// </summary>         /// <param name="DirectoryName">子目录名称</param>         public bool MakeDirectory(string DirectoryName)         {             try             {                 if (!IsValidPathChars(DirectoryName))                 {                     throw new Exception("目录名非法!");                 }                 if (DirectoryExist(DirectoryName))                 {                     throw new Exception("服务器上面已经存在同名的文件名或目录名!");                 }                 Response = Open(new Uri(this.Uri.ToString() + DirectoryName), WebRequestMethods.Ftp.MakeDirectory);                 return true;             }             catch (Exception ep)             {                 ErrorMsg = ep.ToString();                 throw ep;             }         }         /**/         /// <summary>         /// 从当前工作目录中删除一个子目录         /// </summary>         /// <param name="DirectoryName">子目录名称</param>         public bool RemoveDirectory(string DirectoryName)         {             try             {                 if (!IsValidPathChars(DirectoryName))                 {                     throw new Exception("目录名非法!");                 }                 if (!DirectoryExist(DirectoryName))                 {                     throw new Exception("服务器上面不存在指定的文件名或目录名!");                 }                 Response = Open(new Uri(this.Uri.ToString() + DirectoryName), WebRequestMethods.Ftp.RemoveDirectory);                 return true;             }             catch (Exception ep)             {                 ErrorMsg = ep.ToString();                 throw ep;             }         }         #endregion

        #region 文件、目录名称有效性判断         /**/         /// <summary>         /// 判断目录名中字符是否合法         /// </summary>         /// <param name="DirectoryName">目录名称</param>         public bool IsValidPathChars(string DirectoryName)         {             char[] invalidPathChars = Path.GetInvalidPathChars();             char[] DirChar = DirectoryName.ToCharArray();             foreach (char C in DirChar)             {                 if (Array.BinarySearch(invalidPathChars, C) >= 0)                 {                     return false;                 }             }             return true;         }         /**/         /// <summary>         /// 判断文件名中字符是否合法         /// </summary>         /// <param name="FileName">文件名称</param>         public bool IsValidFileChars(string FileName)         {             char[] invalidFileChars = Path.GetInvalidFileNameChars();             char[] NameChar = FileName.ToCharArray();             foreach (char C in NameChar)             {                 if (Array.BinarySearch(invalidFileChars, C) >= 0)                 {                     return false;                 }             }             return true;         }         #endregion

        #region 目录切换操作         /**/         /// <summary>         /// 进入一个目录         /// </summary>         /// <param name="DirectoryName">         /// 新目录的名字。         /// 说明:如果新目录是当前目录的子目录,则直接指定子目录。如: SubDirectory1/SubDirectory2 ;         /// 如果新目录不是当前目录的子目录,则必须从根目录一级一级的指定。如: ./NewDirectory/SubDirectory1/SubDirectory2         /// </param>         public bool GotoDirectory(string DirectoryName)         {             string CurrentWorkPath = this.DirectoryPath;             try             {                 DirectoryName = DirectoryName.Replace("//", "/");                 string[] DirectoryNames = DirectoryName.Split(new char[] { '/' });                 if (DirectoryNames[0] == ".")                 {                     this.DirectoryPath = "/";                     if (DirectoryNames.Length == 1)                     {                         return true;                     }                     Array.Clear(DirectoryNames, 0, 1);                 }                 bool Success = false;                 foreach (string dir in DirectoryNames)                 {                     if (dir != null)                     {                         Success = EnterOneSubDirectory(dir);                         if (!Success)                         {                             this.DirectoryPath = CurrentWorkPath;                             return false;                         }                     }                 }                 return Success;

            }             catch (Exception ep)             {                 this.DirectoryPath = CurrentWorkPath;                 ErrorMsg = ep.ToString();                 throw ep;             }         }         /**/         /// <summary>         /// 从当前工作目录进入一个子目录         /// </summary>         /// <param name="DirectoryName">子目录名称</param>         private bool EnterOneSubDirectory(string DirectoryName)         {             try             {                 if (DirectoryName.IndexOf("/") >= 0 || !IsValidPathChars(DirectoryName))                 {                     throw new Exception("目录名非法!");                 }                 if (DirectoryName.Length > 0 && DirectoryExist(DirectoryName))                 {                     if (!DirectoryName.EndsWith("/"))                     {                         DirectoryName += "/";                     }                     _DirectoryPath += DirectoryName;                     return true;                 }                 else                 {                     return false;                 }             }             catch (Exception ep)             {                 ErrorMsg = ep.ToString();                 throw ep;             }         }         /**/         /// <summary>         /// 从当前工作目录往上一级目录         /// </summary>         public bool ComeoutDirectory()         {             if (_DirectoryPath == "/")             {                 ErrorMsg = "当前目录已经是根目录!";                 throw new Exception("当前目录已经是根目录!");             }             char[] sp = new char[1] { '/' };

            string[] strDir = _DirectoryPath.Split(sp, StringSplitOptions.RemoveEmptyEntries);             if (strDir.Length == 1)             {                 _DirectoryPath = "/";             }             else             {                 _DirectoryPath = String.Join("/", strDir, 0, strDir.Length - 1);             }             return true;

        }         #endregion

        #region 重载WebClient,支持FTP进度         internal class MyWebClient : WebClient         {             protected override WebRequest GetWebRequest(Uri address)             {                 FtpWebRequest req = (FtpWebRequest)base.GetWebRequest(address);                 req.UsePassive = false;                 return req;             }         }         #endregion     }     #endregion }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MATLAB求解一维热传导方程的第二问题可以使用有限差分法(FDM)。有限差分法是一种常用的数值方法,用于求解偏微分方程。这种方法将空间离散化为一系列节点,并使用差分近似来估计导数。对于一维热传导方程的第二问题,可以通过使用有限差分法来离散化方程,并使用迭代算法求解离散化的方程组。 具体而言,可以使用以下步骤来求解一维热传导方程的第二问题: 1. 确定模型和边界条件。定义热传导系数、初始条件和边界条件。 2. 将空间离散化。将一维空间划分为若干个节点,并确定节点间距。 3. 使用差分近似。将温度的二阶导数用心差分公式近似表示。 4. 离散化方程。将一维热传导方程的第二问题转化为一个线性方程组,其未知数是各节点的温度。 5. 设置边界条件。根据边界条件修改线性方程组的系数矩阵和右侧向量。 6. 求解线性方程组。使用MATLAB的求解函数(如“\”或“inv”)求解离散化的方程组。 7. 可视化结果。使用MATLAB的绘图函数(如“plot”)将温度分布可视化。 这是一种基本的方法,但也可以根据具体情况进行调整和改进。通过使用MATLAB的数值方法和编程功能,可以对一维热传导方程的第二问题进行数值求解,并获得温度分布的近似解。<span class="em">1</span><span class="em">2</span><span class="em">3</span>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值