Exemplo n.º 1
0
        static List <DirectoryItem> GetDirectoryInformation(string address, string username, string password)
        {
            FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(address);

            request.Method     = WebRequestMethods.Ftp.ListDirectoryDetails;
            request.UsePassive = true;
            request.UseBinary  = true;
            request.KeepAlive  = false;

            List <DirectoryItem> returnValue = new List <DirectoryItem>();

            string[] list = null;

            using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
                using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                {
                    list = reader.ReadToEnd().Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
                }

            foreach (string line in list)
            {
                // Windows FTP Server Response Format
                // DateCreated    IsDirectory    Name
                string data = line;

                // Parse date

                data = data.Remove(0, 24);

                // Parse <DIR>
                string dir         = data.Substring(0, 5);
                bool   isDirectory = dir.Equals("<dir>", StringComparison.InvariantCultureIgnoreCase);
                data = data.Remove(0, 5);
                data = data.Remove(0, 10);

                // Parse name
                string name = data;

                // Create directory info
                DirectoryItem item = new DirectoryItem();
                item.BaseUri     = new Uri(address);
                item.IsDirectory = isDirectory;
                item.Name        = name;

                Debug.WriteLine(item.AbsolutePath);
                item.Items = item.IsDirectory ? GetDirectoryInformation(item.AbsolutePath, username, password) : new List <DirectoryItem>();

                returnValue.Add(item);
            }

            return(returnValue);
        }
Exemplo n.º 2
0
        public static List <DirectoryItem> Expand(DirectoryItem directory)
        {
            List <DirectoryItem> items = new List <DirectoryItem>();

            if (directory.Items.Any())
            {
                foreach (var v in directory.Items)
                {
                    items.AddRange(Expand(v));
                }
            }

            else
            {
                items.Add(directory);
            }

            return(items);
        }