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); }
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); }