【问题标题】:FTP upload ProgressBar in VB.NETVB.NET中FTP上传ProgressBar
【发布时间】:2013-04-05 05:21:04
【问题描述】:

我正在编写一个将文件上传到远程 FTP 服务器的应用程序。这是我已经可以使用的代码。

clsrequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile

Dim bFile() As Byte = System.IO.File.ReadAllBytes(rutaorigen)

Dim clsStream As System.IO.Stream = clsrequest.GetRequestStream()

clsStream.Write(bFile, 0, bFile.Length)

clsStream.Close()
clsStream.Dispose()

现在我想在 VB.NET 中以ProgressBar 显示进度。

文件不太大(最大 10 MB)。

我已经尝试过我在此处找到的示例,但没有成功。

我希望你能帮助我。谢谢!

【问题讨论】:

标签: vb.net winforms ftp progress-bar ftpwebrequest


【解决方案1】:

我很久以前从一个例子中得到了这个。代码应该很容易根据您的需要进行更改。

Dim clsRequest As System.Net.FtpWebRequest = _
        DirectCast(System.Net.WebRequest.Create(ServLabel.Text & TextBox1.Text), System.Net.FtpWebRequest)

    clsRequest.Credentials = New System.Net.NetworkCredential(PassLabel.Text, UserLabel.Text)
    clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile
    rfshTMR.Enabled = True
    Dim File() As Byte = System.IO.File.ReadAllBytes(txtFile.Text)
    Dim clsStream As System.IO.Stream = _
        clsRequest.GetRequestStream()
    clsStream.Write(File, 0, File.Length)
    For offset As Integer = 0 To File.Length Step 1024
        ToolStripProgressBar1.Value = CType(offset * ToolStripProgressBar1.Maximum / File.Length, Integer)
        Dim chunkSize As Integer = File.Length - offset - 1
        If chunkSize > 1024 Then chunkSize = 1024
        clsStream.Write(File, offset, chunkSize)
        ToolStripProgressBar1.Value = ToolStripProgressBar1.Maximum
    Next
    clsStream.Close()
    clsStream.Dispose()
    MsgBox("File Is Now In Database", MsgBoxStyle.OkOnly, "Upload Complete")

【讨论】:

  • 大家好,仍然无法正常工作。我需要实现多线程吗?谢谢
  • 此代码适用于我,请确保您没有明显的错误。是的,多线程是个好主意。
  • 为什么ToolStripProgressBar1.Value = ToolStripProgressBar1.Maximum 在循环内?我认为它应该在循环之外和之后。
  • 我认为这是在最后确定进度条,因为如果它不在循环中并且您正在下载多个文件,当您完成文件上传时,它不会将进度条填充到顶部。明白了吗?
【解决方案2】:

控制台上的简单进度:

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

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

WinForms GUI 进度:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ' Run Upload on background thread
    Task.Run((Sub() Upload()))
End Sub

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

    Using fileStream As Stream = File.OpenRead("C:\local\path\file.zip"),
          ftpStream As Stream = request.GetRequestStream()
        ProgressBar1.Invoke(Sub() ProgressBar1.Maximum = fileStream.Length)
        Dim buffer As Byte() = New Byte(10240 - 1) {}
        Dim read As Integer
        Do
            read = fileStream.Read(buffer, 0, buffer.Length)
            If read > 0 Then
                ftpStream.Write(buffer, 0, read)
                ProgressBar1.Invoke(Sub() ProgressBar1.Value = fileStream.Position)
            End If
        Loop While read > 0
    End Using
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 2014-08-26
    • 2012-02-07
    相关资源
    最近更新 更多