如何在C#中根据创建日期对从FTP接收的文件进行排序?

问题描述 投票:3回答:2

我从一个FTP目录中接收到一个文件名列表。但现在文件名是按文件名排序的。我想要的是在我将文件保存在列表中之前,按创建日期排序。我只是不知道该怎么做?以下是我如何接收文件名并将它们添加到字符串列表中的方法。

try
        {
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(URI);
            request.Method = WebRequestMethods.Ftp.ListDirectory;

            request.Credentials = new NetworkCredential(ftpUsername, ftpPassword);
            FtpWebResponse response = (FtpWebResponse)request.GetResponse();
            Stream responseStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(responseStream);
            string names = reader.ReadToEnd();

            reader.Close();
            response.Close();

            return names.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList();
        }
        catch (Exception)
        {
            throw;
        }

EDIT: 所以我发现我之前接收文件的方式并不包含文件创建时的细节,所以我需要用另一种方式来获取文件,以便获取创建日期。 这是我获取文件的新方法。

try
        {
            /* Create an FTP Request */
            ftpRequest = (FtpWebRequest)FtpWebRequest.Create(URI);

            /* Log in to the FTP Server with the User Name and Password Provided */
            ftpRequest.Credentials = new NetworkCredential(ftpUsername, ftpPassword);

            /* When in doubt, use these options */
            ftpRequest.UseBinary = true;
            ftpRequest.UsePassive = true;
            ftpRequest.KeepAlive = true;

            /* Specify the Type of FTP Request */
            ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

            /* Establish Return Communication with the FTP Server */
            ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();

            /* Establish Return Communication with the FTP Server */
            ftpStream = ftpResponse.GetResponseStream();

            /* Get the FTP Server's Response Stream */
            StreamReader ftpReader = new StreamReader(ftpStream);

            /* Store the Raw Response */
            string directoryRaw = null;

            /* Read Each Line of the Response and Append a Pipe to Each Line for Easy Parsing */
            try
            {
                while (ftpReader.Peek() != -1) 
                { 
                    directoryRaw += ftpReader.ReadLine() + "|"; 
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            /* Resource Cleanup */
            ftpReader.Close();
            ftpStream.Close();
            ftpResponse.Close();
            ftpRequest = null;

            /* Return the Directory Listing as a string Array by Parsing 'directoryRaw' with the Delimiter you Append (I use | in This Example) */
            try
            {
                string[] directoryList = directoryRaw.Split("|".ToCharArray()); 

                return directoryList;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }

        /* Return an Empty string Array if an Exception Occurs */
        return new string[] { "" };

但我还是不明白如何对创建日期后的文件进行排序。有没有一种方法可以写一个linq查询,像Orderby之类的?

c# ftp
2个回答
1
投票

所以当我发现我需要检索一个详细的文件列表后,排序问题很容易解决。我只需要调用

Array.Sort(arrayOfFiles)

这是工作代码。

try
        {
            /* Create an FTP Request */
            ftpRequest = (FtpWebRequest)FtpWebRequest.Create(URI);

            /* Log in to the FTP Server with the User Name and Password Provided */
            ftpRequest.Credentials = new NetworkCredential(ftpUsername, ftpPassword);

            /* When in doubt, use these options */
            ftpRequest.UseBinary = true;
            ftpRequest.UsePassive = true;
            ftpRequest.KeepAlive = true;

            /* Specify the Type of FTP Request */
            ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

            /* Establish Return Communication with the FTP Server */
            ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();

            /* Establish Return Communication with the FTP Server */
            ftpStream = ftpResponse.GetResponseStream();

            /* Get the FTP Server's Response Stream */
            StreamReader ftpReader = new StreamReader(ftpStream);

            /* Store the Raw Response */
            string directoryRaw = null;

            /* Read Each Line of the Response and Append a Pipe to Each Line for Easy Parsing */
            try
            {
                while (ftpReader.Peek() != -1) 
                { 
                    directoryRaw += ftpReader.ReadLine() + "|"; 
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            /* Resource Cleanup */
            ftpReader.Close();
            ftpStream.Close();
            ftpResponse.Close();
            ftpRequest = null;

            /* Return the Directory Listing as a string Array by Parsing 'directoryRaw' with the Delimiter you Append (I use | in This Example) */
            try
            {
                string[] directoryList = directoryRaw.Split("|".ToCharArray());
                Array.Sort(directoryList);

                return directoryList;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }

        /* Return an Empty string Array if an Exception Occurs */
        return new string[] { "" };

-1
投票

这样的东西对你有用吗?

 string[] fileNames = Directory.GetFiles("directory ", "*.*");

 DateTime[] creationTimes = new DateTime[fileNames.Length];

 for (int i = 0; i < fileNames.Length; i++)

 creationTimes[i] = new FileInfo(fileNames[i]).CreationTime;

 Array.Sort(creationTimes, fileNames);
© www.soinside.com 2019 - 2024. All rights reserved.