示例#1
0
        /// <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);
        }