posts - 124,  comments - 29,  trackbacks - 0
  1using System;
  2using System.Collections.Generic;
  3using System.Net;
  4using System.IO;
  5using System.Windows.Forms;
  6using System.Text;
  7
  8namespace FTPDownLoad
  9{
 10    class FtpFileInfo
 11    {
 12        public string FileName;
 13        public DateTime ModifyDateTime;
 14        public bool IsDirectory;
 15    }

 16    class FtpHelper
 17    {
 18        private string ftpServer;
 19        private string userName;
 20        private string password;
 21        FtpWebRequest ftpRequest = null;
 22        private string errMsg;
 23        public string ErrMsg
 24        {
 25            get return errMsg; }
 26            set { errMsg = value; }
 27        }

 28        public bool IsAnonymous
 29        {
 30            get
 31            {
 32                return !(userName != null && userName.Trim() != String.Empty
 33                        && password != null && password.Trim() != string.Empty);
 34            }

 35        }

 36
 37        public FtpHelper(string ftpServer, string userName, string password)
 38        {
 39            this.ftpServer = ftpServer;
 40            this.userName = userName;
 41            this.password = password;
 42        }

 43
 44        /// <summary>
 45        /// 取得服务器端的文件链表
 46        /// </summary>
 47        /// <param name="serverPath"></param>
 48        /// <returns></returns>

 49        public List<FtpFileInfo> GetFilesList(string serverPath)
 50        {
 51            List<FtpFileInfo> fileInfoList = new List<FtpFileInfo>();
 52            Uri uri = new Uri("ftp://" + ftpServer + serverPath);
 53            StreamReader sr = null;
 54            try
 55            {
 56                ftpRequest = (FtpWebRequest)FtpWebRequest.Create(uri);
 57                if (ftpRequest == nullthrow new Exception("无法打开ftp服务器连接");
 58                ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;   //列表   
 59                if (!IsAnonymous)
 60                {
 61                    ftpRequest.Credentials = new NetworkCredential(userName, password);
 62                }

 63
 64                sr = new StreamReader(ftpRequest.GetResponse().GetResponseStream());
 65                while (!sr.EndOfStream)//读取列表   
 66                {
 67                    //System.Diagnostics.Debug.WriteLine(sr.ReadLine());
 68                    char[] splitChar = ' ' };
 69                    string[] tmpArray = sr.ReadLine().Split(splitChar, StringSplitOptions.RemoveEmptyEntries);
 70                    if (tmpArray.Length != 9)
 71                    {
 72                        continue;
 73                    }

 74                    FtpFileInfo ffi = new FtpFileInfo();
 75                    ffi.IsDirectory = tmpArray[0].StartsWith("d");
 76                    if (!ffi.IsDirectory)
 77                    {
 78                        ffi.FileName = tmpArray[8];
 79                        fileInfoList.Add(ffi);
 80                    }

 81                    else
 82                    {
 83                        continue;
 84                    }

 85                }

 86            }

 87            catch (Exception ex)
 88            {
 89                //TODO: 异常处理.
 90                throw ex;
 91            }

 92            finally
 93            {
 94                if (sr != null) sr.Close();
 95            }

 96
 97            foreach (FtpFileInfo ffi in fileInfoList)
 98            {
 99                ffi.ModifyDateTime = this.GetFileModifyTime(serverPath, ffi.FileName);
100            }

101            return fileInfoList;
102        }

103        /// <summary>
104        /// Download
105        /// </summary>
106        /// <param name="serverPath"></param>
107        /// <param name="serverFileName"></param>
108        /// <param name="localPath"></param>
109        /// <param name="localFileName"></param>
110        /// <returns></returns>

111        public bool Download(string serverPath, string serverFileName, string localPath, string localFileName)
112        {
113            if (!Directory.Exists(localPath))
114            {
115                //TODO: 创建文件夹
116                errMsg = "本地路径不存在: " + localPath;
117                return false;
118            }

119            FileStream outputStream = null;
120            Stream ftpStream = null;
121            try
122            {
123                outputStream = new FileStream(localPath + "\\" + localFileName, FileMode.Create);
124                if (outputStream == null)
125                {
126                    errMsg = "无法创建本地文件";
127                    return false;
128                }

129                ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServer + serverPath + "/" + serverFileName));
130                if (ftpRequest == null)
131                {
132                    errMsg = "无法连接服务器";
133                    return false;
134                }

135                ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
136                ftpRequest.UseBinary = true;
137                //用户验证
138                if (!IsAnonymous)
139                {
140                    ftpRequest.Credentials = new NetworkCredential(userName, password);
141                }

142                ftpStream = ftpRequest.GetResponse().GetResponseStream();
143                int bufferSize = 2048;
144                int readCount;
145                byte[] buffer = new byte[bufferSize];
146
147                while ((readCount = ftpStream.Read(buffer, 0, bufferSize)) > 0)
148                {
149                    outputStream.Write(buffer, 0, readCount);
150                }

151            }

152            catch (Exception ex)
153            {
154                errMsg = ex.ToString();
155                return false;
156            }

157            finally
158            {
159                if (ftpStream != null) ftpStream.Close();
160                if (outputStream != null) outputStream.Close();
161            }

162            FileInfo fi = new FileInfo(localPath + "\\" + localFileName);
163            fi.LastWriteTime = GetFileModifyTime(serverPath, serverFileName);
164            return true;
165        }

166
167        public  void DownLoadDirectory(String ServerPath, String LocalPath)
168        {
169            //取服务器端要下载的目录里的文件列表
170            List<FtpFileInfo> serFileList = GetFilesList(ServerPath);
171            foreach (FtpFileInfo ftpFile in serFileList)
172            {
173                if (ftpFile.IsDirectory) continue;
174                DateTime modifyTime = ftpFile.ModifyDateTime;
175                string localFileName = modifyTime.ToString("yyyyMMddHHmmss"+ "_" + ftpFile.FileName;
176
177                // 如果本地不存在该文件,则说明该文件是比较新的文件,需要下载.
178                if (!File.Exists(LocalPath + "\\" + localFileName))
179                {
180                    if (!Download(ServerPath, ftpFile.FileName, LocalPath, localFileName))
181                    {
182                        MessageBox.Show("下载文件出错!\r\n错误原因: " + ErrMsg);
183                    }

184                }

185            }

186        }

187           
188        public DateTime GetFileModifyTime(string serverPath, string fileName)
189        {
190            Uri uri = new Uri("ftp://" + ftpServer + serverPath + "/" + fileName);
191            DateTime dt = DateTime.Now;
192            try
193            {
194                ftpRequest = (FtpWebRequest)WebRequest.Create(uri);
195                if (!IsAnonymous)
196                {
197                    ftpRequest.Credentials = new NetworkCredential(userName, password);
198                }

199                ftpRequest.Method = WebRequestMethods.Ftp.GetDateTimestamp;
200                ftpRequest.UseBinary = true;
201                ftpRequest.UsePassive = false;
202                dt = ((FtpWebResponse)ftpRequest.GetResponse()).LastModified;
203            }

204            catch (Exception ex)
205            {
206                //TODO: 错误处理
207                throw ex;
208            }

209            return dt;
210        }

211    }

212}
posted on 2008-09-26 17:36 天书 阅读(1030) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(5)

随笔档案

文章分类

文章档案

好友的Bolg

搜索

  •  

最新评论

阅读排行榜

评论排行榜