【问题标题】:Download file from FTP if it does not exist in a given list of local files如果文件在给定的本地文件列表中不存在,则从 FTP 下载文件
【发布时间】:2013-03-31 18:36:03
【问题描述】:

我有一个 FTP 服务器,我想从它下载本地目录中不存在的所有文件。

我尝试做一个For Next,但我无法理解它。我尝试枚举文件,但由于对两个列表都这样做,我得到了一个错误。我认为该错误可能是由于使用本地列表中的单个枚举文件交叉检查在线文件引起的。我该如何消除这个问题?

FTPClient类代码链接:

https://docs.google.com/file/d/0BxFwEuHe1g77TEw2ckZxVUlQdGM/edit?usp=sharing

所有代码:

          Dim ftp As New FTPclient("ftp://www.ahpg.zxq.net", "eg", "eg")

    Dim dirList As FTPdirectory = ftp.ListDirectoryDetail("/")
    Dim result As List(Of String) = ftp.ListDirectory("/")
    For Each line As String In result
        FTPLBX.Items.Add(line)
    Next
    Dim str As String
    Dim locstr As String
    Dim res_numer As IEnumerator
    res_numer = result.GetEnumerator()
    Dim loclist As List(Of String) = New List(Of String) _
                                     (System.IO.Directory.EnumerateFiles("C:/Program Files/Business Elements/Recent Files"))
    Dim LOC_Enum As IEnumerator
    LOC_Enum = loclist.GetEnumerator
    Do While LOC_Enum.MoveNext
        locstr = (LOC_Enum.Current)
    Loop
    Do While (res_numer.MoveNext)
        str = (res_numer.Current)
    Loop

    For Each str In loclist
        If Not loclist.Contains(str) = True Then
            My.Computer.Network.DownloadFile("ftp://www.ahpg.zxq.net/ftpfiles/" & str.ToString, _
                                             "C:/Program Files/Business Elements/Recent Files/" & str.ToString, "eg", "eg")
            MessageBox.Show("Done ")
        End If
    Next

End Sub

【问题讨论】:

  • 有人有解决办法吗?
  • 我昨天编辑了我的代码。有人发现我的问题吗?
  • 那你的错误是什么?你有日志吗?将其包含在您的问题中。
  • 没有错误,就是问题所在。
  • 它只是不下载..

标签: .net vb.net ftp


【解决方案1】:

如果它对你有用,我让它变得更容易一些。给你:

    ' Your instance of FTPClient
    Dim ftp As New FTPclient("ftp://www.ahpg.zxq.net", "eg", "eg")

    ' The path to destination folder (Local directory)
    Dim localDir As String = "C:/Program Files/Business Elements/Recent Files/"

    ' Lists all the file in the given directory of FTP server
    For Each file As FTPfileInfo In ftp.ListDirectoryDetail("/").GetFiles

        Try
            ftp.Download(file, localDir & file.Filename)

            ' The FTPClient class throws exception if the 
            ' file already exists in destination directory
        Catch e As ApplicationException
            Console.WriteLine(e.Message)
        End Try
    Next file

注意 1:我从 CodeProject 下载了 FTPClient 类,但它与您在问题中提供的几乎相同。

注意 2:如果文件存在于您的目标文件夹中,FTPClient 本身会引发异常。因此您无需费心比较文件。

注意 3:注意 locadDir 字符串末尾的尾随 slash。否则,该文件将被下载到 Business Element 文件夹中。

【讨论】:

  • 那是完美的,甚至没有想到如果它已经存在它会例外。谢谢。
  • 如果父目录下有子目录,我们怎么下载呢?
【解决方案2】:

编写一个子方法,我们称之为 IsExistedInLocal 来检查来自 ftp 的文件是否已经在您的本地。如果是,请忽略并继续下一个;如果不是,请下载文件。我假设您知道所有细节,所以伪代码应该没问题

for each FTP_file in FTP_FilesList
  if not IsExistedInLocal(FTP_file) then
    download the file to local
  end if
next

【讨论】:

  • 如何创建 IsExistedInLocal 类? @Quant
【解决方案3】:

在 for 循环中,您将获取列表中的每个条目,然后检查同一个列表是否没有该元素。您的 if 条件永远不会为真,也永远不会到达 DownloadFile 语句。

For Each str In loclist
    If Not loclist.Contains(str) = True Then
        My.Computer.Network.DownloadFile("ftp://www.ahpg.zxq.net/ftpfiles/" & str.ToString, _
                                         "C:/Program Files/Business Elements/Recent Files/" & str.ToString, "eg", "eg")
        MessageBox.Show("Done ")
    End If
Next

【讨论】:

  • 你能给我一个例子来说明你将如何去做吗?我有点卡住了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多