2

ローカル ディレクトリに存在しないすべてのファイルをダウンロードする 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
4

3 に答える 3

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

注1FTPClient :クラスをダウンロードしCodeProjectましたが、質問で提供したものとほぼ同じです。

注2FTPClientファイルが宛先フォルダーに存在する場合、それ自体が例外をスローします。したがって、わざわざファイルを比較する必要はありません。

注 3 : locadDir文字列の末尾のスラッシュに注意してください。それがないと、ファイルはBusiness Elementフォルダにダウンロードされます。

于 2013-04-01T12:22:00.027 に答える
0

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
于 2013-04-04T18:16:20.453 に答える
0

サブメソッドを作成し、それを IsExistedInLocal と呼び、ftp からのファイルが既にローカルにあるかどうかを確認します。そうである場合は、無視して次のものに進みます。そうでない場合は、ファイルをダウンロードしてください。すべての詳細を知っていると思いますので、疑似コードは問題ありません。

for each FTP_file in FTP_FilesList
  if not IsExistedInLocal(FTP_file) then
    download the file to local
  end if
next
于 2013-04-01T11:47:27.060 に答える