Beispiel #1
0
        public FTPFolder GetFTPFolder(string path, bool isRecurse = false)
        {
            if (_errorMsg != null)
            {
                _errorMsg = null;
            }
            FTPFolder retVal = null;

            // fields checking
            if (string.IsNullOrEmpty(path))
            {
                return(retVal);
            }

            try
            {
                if (path.Last() != '/')
                {
                    path += "/";
                }
                retVal = getFTPFolder(path);

                // рекурсивное заполение папок
                if ((retVal != null) && isRecurse)
                {
                    foreach (FTPItem item in retVal.Items)
                    {
                        if (item.ItemType == FSItemTypeEnum.Folder)
                        {
                            FTPItem ftpItem = GetFTPFolder(path + item.Name + "/", true);
                            if (ftpItem != null)
                            {
                                FTPFolder ftpFolder = (FTPFolder)ftpItem;
                                FTPItem[] ftpItems  = new FTPItem[ftpFolder.Items.Count];
                                ftpFolder.Items.CopyTo(ftpItems);
                                ftpFolder = null;

                                ((FTPFolder)item).Items.AddRange(ftpItems);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _errorMsg = ex.Message;
            }

            return(retVal);
        }
Beispiel #2
0
        public FTPFolder getFTPFolder(string path)
        {
            FTPFolder retVal = null;

            FtpWebRequest requestDir = (FtpWebRequest)WebRequest.Create(path);

            FtpWebRequest.DefaultCachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);
            requestDir.KeepAlive             = this.IsAlive;
            requestDir.UsePassive            = this.IsPassive;
            requestDir.Method      = WebRequestMethods.Ftp.ListDirectoryDetails;
            requestDir.Credentials = new NetworkCredential(this.Login, this.PWD);

            FtpWebResponse responseDir = (FtpWebResponse)requestDir.GetResponse();

            using (StreamReader readerDir = new StreamReader(responseDir.GetResponseStream()))
            {
                retVal = new FTPFolder()
                {
                    ItemType = FSItemTypeEnum.Folder, FullName = path
                };

                string  line = readerDir.ReadLine();
                FTPItem item;
                while (line != null)
                {
                    item = FTPItem.Parse(line);
                    if (item != null)
                    {
                        item.FullName = path + item.Name;
                        retVal.Items.Add(item);
                    }
                    line = readerDir.ReadLine();
                }
            }
            responseDir.Close();

            return(retVal);
        }
Beispiel #3
0
        public static FTPItem Parse(string line)
        {
            if (string.IsNullOrEmpty(line))
            {
                return(null);
            }

            string[] parts = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            if (parts.Length < 4)
            {
                return(null);
            }

            FTPItem retVal;

            if (parts[2] == "<DIR>")
            {
                retVal = new FTPFolder();
            }
            else
            {
                retVal = new FTPFile();
                ((FTPFile)retVal).Size = Convert.ToUInt32(parts[2]);
            }

            DateTime dt;
            string   s = parts[0] + " " + parts[1];

            if (DateTime.TryParse(s, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AdjustToUniversal, out dt) == false)
            {
                return(null);
            }
            retVal.DateTime = dt;
            retVal.Name     = string.Join(" ", parts.Skip(3));

            return(retVal);
        }