Exemplo n.º 1
0
        /// <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);
            }
        }
Exemplo n.º 2
0
        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;
                                }
                            }
                        }
                    }
                }
            }
        }