Visual Basic FtpWebRequest 下载文件?

问题描述 投票:0回答:3

我有:

Dim ftploader As System.Net.FtpWebRequest =
    DirectCast(System.Net.WebRequest.Create(
        "ftp://ftp.cabbageee.host-ed.me/nim/Vardelatestmessage.txt"),
        System.Net.FtpWebRequest)

ftploader.Credentials =
    New System.Net.NetworkCredential("Insert Username here", "Insert password here")

我正在尝试将此

.txt
文件下载到我的
c:
驱动器。我已经建立了连接,那么如何保存该
.txt
文件?另外,如何上传文件?我已经尝试过
My.Computer.Network.DownloadFile
,但只能下载/上传一次,因为我不知道如何摆脱该连接。

.net vb.net ftp ftpwebrequest
3个回答
3
投票

使用 VB.NET 从 FTP 服务器下载二进制文件的最简单方法是使用

WebClient.DownloadFile
:

Dim client As WebClient = New WebClient()
client.Credentials = New NetworkCredential("username", "password")
client.DownloadFile(
    "ftp://ftp.example.com/remote/path/file.zip", "C:\local\path\file.zip")

如果您需要更大的控制,而

WebClient
不提供(如 TLS/SSL 加密、ascii/文本传输模式、恢复传输等),请使用
FtpWebRequest
。简单的方法是使用
FileStream
:
将 FTP 响应流复制到
Stream.CopyTo

Dim request As FtpWebRequest =
    WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip")
request.Credentials = New NetworkCredential("username", "password")
request.Method = WebRequestMethods.Ftp.DownloadFile

Using ftpStream As Stream = request.GetResponse().GetResponseStream(),
      fileStream As Stream = File.Create("C:\local\path\file.zip")
    ftpStream.CopyTo(fileStream)
End Using

如果你需要监控下载进度,你必须自己分块复制内容:

Dim request As FtpWebRequest =
    WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip")
request.Credentials = New NetworkCredential("username", "password")
request.Method = WebRequestMethods.Ftp.DownloadFile

Using ftpStream As Stream = request.GetResponse().GetResponseStream(),
      fileStream As Stream = File.Create("C:\local\path\file.zip")
    Dim buffer As Byte() = New Byte(10240 - 1) {}
    Dim read As Integer
    Do
        read = ftpStream.Read(buffer, 0, buffer.Length)
        If read > 0 Then
            fileStream.Write(buffer, 0, read)
            Console.WriteLine("Downloaded {0} bytes", fileStream.Position)
        End If
    Loop While read > 0
End Using

有关 GUI 进度 (WinForms

ProgressBar
),请参阅 (C#):
FtpWebRequest 使用进度条进行 FTP 下载


如果您想从远程文件夹下载所有文件,请参阅
如何使用VB.NET从FTP下载目录


0
投票

您需要调用 GetResponse,然后您将可以访问包含您的内容的响应流,然后您可以将该流写入您要保存的文本文件中。

这里似乎有一个非常充实的示例(它是用 C# 编写的,但我认为应该很容易翻译成 VB)。


-1
投票

试试这个:

 Dim myWebClient As New System.Net.WebClient
 Dim webfilename As String = "http://www.whatever.com/example.txt"
 Dim file As New System.IO.StreamReader(myWebClient.OpenRead(webfilename))

 gCurrentDataFileContents = file.ReadToEnd()

 file.Close()
 file.Dispose()
 myWebClient.Dispose()
© www.soinside.com 2019 - 2024. All rights reserved.