获取FTP文件夹

时间:2017-07-08 11:28:24

标签: c# .net ftp

  1. 我有一个包含文件和目录的本地文件夹(> 2000 文件)。
  2. 我将整个文件夹上传到我的ftp。
  3. 现在举个例子,假设我的ftp文件夹名为FTPFolder,我的本地文件夹名为LOCALFolder。这两个文件夹目前完全相同。

    让我们说两个文件夹都包含一个名为text.txt的文件。

    现在我想做什么:

    如果我更改了FTP上的test.txt,我怎么能在C#中检测到它? 获取所有本地文件和所有FTPfiles然后比较它们太长了。有没有人有另一种方法呢?

    基本上,目标是下载FTP上与本地不同的所有文件。

2 个答案:

答案 0 :(得分:0)

以下是可能的选项:

  1. 检查校验和 - 最好和最快的方式,但首先可能不存在文件。

  2. 检查文件大小及其时间戳。不理想,但可能有效。

  3. 除此之外,我不认为你能做任何事情,而且本身并不是C#问题。

答案 1 :(得分:0)

将本地文件夹与FTP文件夹同步的常用方法是比较文件修改时间。

假设您使用的是FtpWebRequest .NET类,实际上这并非易事。它没有任何标准方法来检索文件修改时间。

请参阅Retrieving creation date of file (FTP)

更好的方法是使用文件校验和,但这几乎不可能 请参阅FTP: copy, check integrity and delete

使用能够更好地支持检索修改时间的第三方FTP客户端库会更容易。如果您使用支持开箱即用的同步的FTP客户端库,则更加容易。

例如,使用WinSCP .NET assembly,您可以使用Session.SynchronizeDirectories method

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

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

    // Synchronize files
    session.SynchronizeDirectories(
        SynchronizationMode.Local, @"C:\local\path", "/remote/path", false).Check();
}

WinSCP GUI可以generate a code template for you

(我是WinSCP的作者)