/// <summary> /// Get the contents of a folder under <see cref="URI"/>. /// </summary> public override List <TreeEntry> ListFolder(TreeEntry folder) { string path; if (folder == null) { path = URI.StartsWith("ftp://") ? URI : "ftp://" + URI; } else { path = folder.RequestURI; } FtpWebRequest request = (FtpWebRequest)WebRequest.Create(path); request.Credentials = credentials; request.Method = WebRequestMethods.Ftp.ListDirectoryDetails; WebResponse response; try { response = request.GetResponse(); } catch (WebException e) { return(new List <TreeEntry>(new TreeEntry[1] { new TreeEntry() { Name = e.Message } })); } using StreamReader reader = new StreamReader(response.GetResponseStream()); StringBuilder result = new StringBuilder(); string line = reader.ReadLine(); while (line != null) { result.Append(line).Append('\n'); line = reader.ReadLine(); } response.Close(); if (!string.IsNullOrEmpty(result.ToString())) { result.Remove(result.ToString().LastIndexOf("\n"), 1); } string[] list = result.ToString().Split('\n'); List <TreeEntry> output = new List <TreeEntry>(); foreach (string listLine in list) { if (!string.IsNullOrEmpty(listLine)) { TreeEntry entry = TreeEntry.CreateFromListLine(listLine, path, credentials); if (!entry.Name.Equals(".") && !entry.Name.Equals("..")) { output.Add(entry); } } } return(output); }