【问题标题】:Listing top N files from FTP directory列出 FTP 目录中的前 N ​​个文件
【发布时间】:2018-03-11 08:18:24
【问题描述】:

我需要从 FTP 目录中读取前 100 个文件并在下载后处理这些文件。

我不能依赖第一次调用获得的整个文件列表,因为在处理过程中会添加和删除一些新文件。当目录中有新文件时,我的程序预计会继续运行。

我编写了以下代码来读取所有文件,并从中只取前 100 个。

List<FileHolder> list = new List<FileHolder>();
int filesToRead = 100;

FtpWebRequest ftpRequest = GetFtpRequest(directoryPath);
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();

using (Stream responseStream = ftpResponse.GetResponseStream())
{
    if (responseStream != null)
    {
        using (StreamReader reader = new StreamReader(responseStream))
        {
            var line = reader.ReadLine();
            while (line != null)
            {
                var split = line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                if (split.Length > 3)
                {
                    var fileName = split[split.Length-1];
                    if (!string.IsNullOrEmpty(fileName) && split[2].ToLower() != "<dir>" && line.Contains(".xml"))
                    {
                        var ftpFile = new FileHolder
                        {
                            FileName = fileName
                        };
                        list.Add(ftpFile);

                        //break on desired max number of files
                        if (list.Count == filesToRead)
                        {
                            break;
                        }
                    }
                }
                line = reader.ReadLine();
            }
        }
    }
}

ftpResponse.Close();

是否有任何其他方式或特定的 FTP 方法来仅获取顶级 N 文件,因为我必须迭代调用此方法。

【问题讨论】:

  • 前 100 个文件是什么?是按时间排列还是按字母顺序排列,还是仅按它们在目录中的排列顺序排列?
  • 这只是它们排列的顺序。文件像 111.xml、112.xml ..... 299.xml 一样放置,可以按任何顺序处理。我只需要采取整套的大块。在处理过程中,我必须移动这些文件,因此我不能依赖以前获得的列表。
  • 使用FTP获取目录。然后一次获取一个以前未读取的文件或根据时间更改的文件。如果一个文件是 1 兆字节,如果它没有改变,你不想继续获取相同的文件。因此,您必须将收到文件的时间与远程文件夹中的列表进行比较。

标签: c# .net ftp ftpwebrequest


【解决方案1】:

是否有任何其他方式或特定的 FTP 方法仅获取前 N 个文件,因为我必须迭代调用此方法。

没有。您必须检索整个目录列表,然后选择“前 100 个文件”。就像你已经在做的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2012-08-11
    • 2011-03-13
    • 2017-08-31
    相关资源
    最近更新 更多