Beispiel #1
0
        public async Task <FtpFolder> GetFtpFolderDetailsAsync(String argPath, Int32 argLevel)
        {
            // Get the object used to communicate with the server.
            FtpWebRequest request = GetFtpWebRequest(argPath);

            request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
            String contents = "";

            using (FtpWebResponse response = (FtpWebResponse)(await request.GetResponseAsync()))
            {
                Debug.WriteLine($"Directory {argPath} List Complete, status: '{response.StatusDescription}'");

                using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                {
                    contents = await reader.ReadToEndAsync();

                    Debug.WriteLine(contents);
                }
            }

            FtpFolder f = ParseFtpFolderResponse(argPath, contents);

            // Read subfolders, if argLevel>0
            if (argLevel > 0 && f.Name != "..." && f.Name != ".." && f.Name != ".")
            {
                if (f.Folders.Count > 0)
                {
                    for (int i = 0; i < f.Folders.Count; i++)
                    {
                        DateTime tmpDate = f.Folders[i].Date;
                        f.Folders[i] = await GetFtpFolderDetailsAsync(f.Folders[i].FullPath, argLevel - 1);

                        f.Folders[i].Date = tmpDate;
                    }
                }
            }
            return(f);
        }
Beispiel #2
0
        private FtpFolder ParseFtpFolderResponse(String argPath, String argContents)
        {
            FtpFolder fRoot = new FtpFolder();

            fRoot.FullPath = argPath;
            fRoot.Name     = argPath.Replace(FtpDomain, "").Split(new String[] { "/" }, StringSplitOptions.None).Last();
            if (String.IsNullOrWhiteSpace(fRoot.Name))
            {
                fRoot.Name = "/";
            }
            String[] lines = argContents.Replace("\r", "").Split(new String[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);
            foreach (String line in lines)
            {
                String[] elements = GetElements(line);
                if (line.StartsWith("d"))
                {
                    // We have a folder
                    FtpFolder childFolder = new FtpFolder();
                    childFolder.Name     = elements[8];
                    childFolder.FullPath = UrlHelper.Combine(argPath, elements[8]);
                    if (elements[7].Contains(":"))
                    {
                        // the elements[7] contains hour
                        //Debug.WriteLine(String.Format("{0} {1} {2} {3}", elements[5], elements[6].PadLeft(2, '0'), DateTime.Today.Year, elements[7]));
                        childFolder.Date = DateTime.ParseExact(String.Format("{0} {1} {2} {3}", elements[5], elements[6].PadLeft(2, '0'), DateTime.Today.Year, elements[7]),
                                                               "MMM dd yyyy HH:mm",
                                                               System.Globalization.CultureInfo.InvariantCulture
                                                               );
                        if (childFolder.Date >= DateTime.Today.AddDays(1))
                        {
                            childFolder.Date = new DateTime(DateTime.Today.Year - 1, childFolder.Date.Month, childFolder.Date.Day, childFolder.Date.Hour, childFolder.Date.Minute, childFolder.Date.Second);
                        }
                    }
                    else
                    {
                        // the elements[7] contains year
                        //Debug.WriteLine(String.Format("{0} {1} {2}", elements[5], elements[6].PadLeft(2, '0'), elements[7]));
                        childFolder.Date = DateTime.ParseExact(String.Format("{0} {1} {2}", elements[5], elements[6].PadLeft(2, '0'), elements[7]),
                                                               "MMM dd yyyy",
                                                               System.Globalization.CultureInfo.InvariantCulture
                                                               );
                    }
                    fRoot.Folders.Add(childFolder);
                }
                else
                {
                    // We have a file
                    FtpFile childFile = new FtpFile();
                    childFile.Name     = elements[8];
                    childFile.Folder   = fRoot;
                    childFile.FullPath = fRoot.Name;
                    childFile.Size     = Int64.Parse(elements[4]);
                    if (elements[7].Contains(":"))
                    {
                        // the elements[7] contains hour
                        //Debug.WriteLine(String.Format("{0} {1} {2} {3}", elements[5], elements[6].PadLeft(2, '0'), DateTime.Today.Year, elements[7]));
                        childFile.Date = DateTime.ParseExact(String.Format("{0} {1} {2} {3}", elements[5], elements[6].PadLeft(2, '0'), DateTime.Today.Year, elements[7]),
                                                             "MMM dd yyyy HH:mm",
                                                             System.Globalization.CultureInfo.InvariantCulture
                                                             );
                        if (childFile.Date > DateTime.Today.AddDays(1))
                        {
                            childFile.Date = new DateTime(DateTime.Today.Year - 1, childFile.Date.Month, childFile.Date.Day, childFile.Date.Hour, childFile.Date.Minute, childFile.Date.Second);
                        }
                    }
                    else
                    {
                        // the elements[7] contains year
                        //Debug.WriteLine(String.Format("{0} {1} {2}", elements[5], elements[6].PadLeft(2, '0'), elements[7]));
                        childFile.Date = DateTime.ParseExact(String.Format("{0} {1} {2}", elements[5], elements[6].PadLeft(2, '0'), elements[7]),
                                                             "MMM dd yyyy",
                                                             System.Globalization.CultureInfo.InvariantCulture
                                                             );
                    }
                    fRoot.Files.Add(childFile);
                }
            }
            return(fRoot);
        }