/// <summary> /// 获得当前路径下ftp对象的数组. /// </summary> /// <returns></returns> public FtpFileSystemInfo[] GetFtpFileSystemInfos() { try { List <FtpFileSystemInfo> infos = new List <FtpFileSystemInfo>(); FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create(new Uri(Uri)); ftp.Credentials = new NetworkCredential(BaseUri.UserID, BaseUri.Password); ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails; ftp.UsePassive = false; using (WebResponse response = ftp.GetResponse()) { using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default)) { List <string> result = new List <string>(); while (!reader.EndOfStream) { result.Add(reader.ReadLine()); } foreach (var item in result) { FtpFileSystemInfo ftpFileSystemInfo = TranslateTo(item); if (ftpFileSystemInfo != null) { infos.Add(ftpFileSystemInfo); } } } } return(infos.ToArray()); } catch (Exception) { return(null); } }
public override void Doing() { string fileName; if (!IsFullName) { fileName = Uri + Key.ParentUri + Key.DisplayName; } else { fileName = Uri; } FtpFileSystemInfo.SplitUri(fileName, out string d, out string dn); if (!Directory.Exists(d)) { Directory.CreateDirectory(d); } using (FileStream stream = new FileStream(fileName, FileMode.Append)) { FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri(Key.Uri)); request.Method = WebRequestMethods.Ftp.DownloadFile; request.UseBinary = true; request.UsePassive = false; request.ContentOffset = stream.Length; Info.Current = stream.Length; request.Credentials = new NetworkCredential(Key.BaseUri.UserID, Key.BaseUri.Password); using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) { using (Stream ftpstream = response.GetResponseStream()) { int bufferSize = 2048; int readCount; byte[] buffer = new byte[bufferSize]; stream.Position = stream.Length; Info.Size = Key.Size; //指定内部取消. while (true) { if (isCanceling) { ProcessState = ProcessState.Waiting; isCanceling = false; break; } else { readCount = ftpstream.Read(buffer, 0, bufferSize); if (readCount > 0) { stream.Write(buffer, 0, readCount); Info.Current += readCount; ProcessState = ProcessState.Doing; } else { ProcessState = ProcessState.Completed; break; } } } } } } }