将文件从C#的FTP服务器下载到修改日期大于指定日期的本地文件夹

dragy

我在C#Web应用程序上工作,需要使用FTP将文件下载到本地文件夹。这些图像的修改日期必须大于我指定的日期。

码:

public static List<FTPLineResult> GetFilesListSortedByDate(string ftpPath, Regex nameRegex, DateTime cutoff, System.Security.Cryptography.X509Certificates.X509Certificate cert)
{
    List<FTPLineResult> output = new List<FTPLineResult>();

    if (cert != null)
    {
        FtpWebRequest request = FtpWebRequest.Create(ftpPath) as FtpWebRequest;
        request.Credentials = new NetworkCredential("unm", "pwd");
        request.ClientCertificates.Add(cert);

        ConfigureProxy(request);
        request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
        FtpWebResponse response = request.GetResponse() as FtpWebResponse;
        StreamReader directoryReader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.ASCII);
        var parser = new FTPLineParser();
        while (!directoryReader.EndOfStream)
        {
            var result = parser.Parse(directoryReader.ReadLine());
            if (!result.IsDirectory && result.DateTime > cutoff && nameRegex.IsMatch(result.Name))
            {
                output.Add(result);
            }
        }
        // need to ensure the files are sorted in ascending date order
        output.Sort(
            new Comparison<FTPLineResult>(
                delegate(FTPLineResult res1, FTPLineResult res2)
                {
                    return res1.DateTime.CompareTo(res2.DateTime);
                }
            )
        );
    }

    return output;
}

我必须使用证书(.p12)。
我怎样才能做到这一点?

马丁·普里克里(Martin Prikryl)

您必须检索远程文件的时间戳以选择所需的文件。

不幸的是,由于.NET框架不支持FTPMLSD命令,因此没有真正可靠,有效的方法来使用.NET框架提供的功能来检索时间戳MLSD命令以标准化的机器可读格式提供远程目录列表。该命令和格式由RFC 3659标准化

您可以使用.NET框架支持的替代方法:


或者,您可以使用支持现代MLSD命令的第三方FTP客户端实现,或者可以在有时间限制的情况下直接下载文件。

例如WinSCP .NET程序集同时支持MLSD时间限制

甚至还有一个特定任务的示例:如何仅传输新文件/修改过的文件?
该示例适用于PowerShell,但可以轻松转换为C#:

// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
    Protocol = Protocol.Ftp,
    HostName = "ftp.example.com",
    UserName = "username",
    Password = "password",
};

using (Session session = new Session())
{
    // Connect
    session.Open(sessionOptions);

    // Download files created in 2017-06-15 and later
    TransferOptions transferOptions = new TransferOptions();
    transferOptions.FileMask = "*>=2017-06-15";
    session.GetFiles("/remote/path/*", @"C:\local\path\", false, transferOptions).Check();
}

尽管对于Web应用程序,WinSCP可能不是最佳解决方案。您也许可以找到另一个具有类似功能的第三方库。


WinSCP还支持使用客户端证书进行身份验证。请参阅SessionOptions.TlsClientCertificatePath但这确实是一个单独的问题。

(我是WinSCP的作者)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C# 如何将文件从 URL 下载到服务器文件夹

使用c#将文件列表从ftp下载到本地文件夹?

直接从URL将文件下载到本地文件夹或远程服务器中的文件夹

使用SSH将文件从文件夹移动到远程服务器上的文件夹,而无需将文件下载到本地计算机

维护服务器和本地计算机之间文件的最后修改日期

C#将文件保存到服务器上的文件夹而不是本地

使用Python将所有文件从带日期的SFTP文件夹下载到本地文件夹

将所有文件从FTP上的特定文件夹下载到本地文件夹

使用FTPClient.getModificationTime获取FTP服务器中文件的最后修改日期会产生null

根据文件夹中最近的文件修改日期更改文件夹修改日期

如何将文件夹文件的修改日期添加到GridView中?

仅使用PowerShell将新文件从FTP目录下载到本地文件夹

Python-从文件夹返回修改日期

按修改日期列出文件夹

Pyspark检查hdfs文件夹修改日期

如何使用API和C#将文件从天蓝色DevOps服务器下载到指定路径

Windows批处理文件-按修改日期和/或创建日期将文件排序到文件夹中

使用python自动执行ssh'到服务器和将文件下载到特定文件夹的过程

如何使用Cygwin将多个文件夹的“修改日期”更改为与每个文件夹中的.mkv相同

更改多个文件夹的修改日期以匹配其最近修改的文件的日期

将文件下载到服务器?

如何将文件从s3服务下载到本地文件夹

如何(如果可能)将文件夹的修改日期更改为过去?

如何使用WinSCP命令行从FTP将图像下载到本地文件夹

如何在FTP文件夹的Dolphin 15.12.3中按“修改日期”对文件进行排序

根据子文件夹的最后修改日期对文件夹进行排序

如何在没有下载提示的情况下将文件从服务器写入本地文件夹?

本地文件的上次修改日期。的JavaScript

将本地文件夹结构转换为服务器上的文件夹结构