vb.net – 使用SSH.NET的SFTP进展
发布时间:2020-12-17 00:10:55 所属栏目:大数据 来源:网络整理
导读:VB2010使用SSH.NET https://sshnet.codeplex.com/ 我已下载并实现了库以进行SFTP下载,效果很好.我一直在查看文档和示例,只是看不到如何实现SFTP下载和进度.我想显示下载的进度.到目前为止,我有: Imports Renci.SshNet Imports System.IO Using sftp As New
VB2010使用SSH.NET
https://sshnet.codeplex.com/
我已下载并实现了库以进行SFTP下载,效果很好.我一直在查看文档和示例,只是看不到如何实现SFTP下载和进度.我想显示下载的进度.到目前为止,我有: Imports Renci.SshNet Imports System.IO Using sftp As New SftpClient("0.0.0.0",25,"id","pwd") 'connect to the server sftp.Connect() 'the name of the remote file we want to transfer to the PC Dim remoteFileName As String = "/data/OUT/trips.txt" 'download the file as a memory stream and convert to a file stream Using ms As New MemoryStream 'download as memory stream sftp.DownloadFile(remoteFileName,ms) 'create a file stream Dim fs As New FileStream("c:mytrips.txt",FileMode.Create,FileAccess.Write) 'write the memory stream to the file stream ms.WriteTo(fs) 'close file stream fs.Close() 'close memory stream ms.Close() End Using 'disconnect from the server sftp.Disconnect() MsgBox("The file has been downloaded from the server.",MsgBoxStyle.Information) End Using 编辑:好的我已经做了一些研究,并在codeplex讨论论坛中找到了一个例子.其中我了解到还有另一个我将使用的异步下载功能.它是在调试窗口中显示进度以及进度条控件的好方法.随意评论. Imports Renci.SshNet Imports System.IO Imports Renci.SshNet.Sftp Dim fileSize As Long Private Sub btnGo_Click(sender As Object,e As EventArgs) Handles btnGo.Click Try Using sftp As New SftpClient("0.0.0.0","pwd") 'connect to the server sftp.Connect() 'the name of the remote file we want to transfer to the PC Dim remoteFileName As String = "/Data/OUT/Config.txt" 'check for existence of the file Dim IsExists As Boolean = sftp.Exists(remoteFileName) If IsExists Then 'get the attributes of the file (namely the size) Dim att As Sftp.SftpFileAttributes = sftp.GetAttributes(remoteFileName) fileSize = att.Size 'download the file as a memory stream and convert to a file stream Using ms As New MemoryStream 'download as memory stream 'sftp.DownloadFile(remoteFileName,ms,AddressOf DownloadCallback) 'with download progress 'sftp.DownloadFile(remoteFileName,ms) 'without download progress 'here we try an asynchronous operation and wait for it to complete. Dim asyncr As IAsyncResult = sftp.BeginDownloadFile(remoteFileName,ms) Dim sftpAsyncr As SftpDownloadAsyncResult = CType(asyncr,SftpDownloadAsyncResult) While Not sftpAsyncr.IsCompleted Dim pct As Integer = CInt((sftpAsyncr.DownloadedBytes / fileSize) * 100) Debug.Print("Downloaded {0} of {1} ({2}%).",sftpAsyncr.DownloadedBytes,fileSize,pct) pgbMain.Value = pct Application.DoEvents() End While sftp.EndDownloadFile(asyncr) 'create a file stream Dim localFileName As String = "c:" & Date.Now.ToString("yyyy-dd-MM_HHmmss") & "_test.txt" Dim fs As New FileStream(localFileName,FileAccess.Write) 'write the memory stream to the file stream ms.WriteTo(fs) 'close file stream fs.Close() 'close memory stream ms.Close() End Using 'disconnect from the server sftp.Disconnect() 'success MsgBox("The file has been downloaded from the server.",MsgBoxStyle.Information) Else MsgBox("The file does not exist on the server.",MsgBoxStyle.Exclamation) End If End Using Catch ex As Exception MsgBox(ex.ToString,MsgBoxStyle.Critical) Finally Me.Cursor = Cursors.Default End Try End Sub 我的测试文件下载0.4秒,因此很难看到进度.较大的文件测试非常好.
我做了一些研究,并在codeplex讨论论坛中找到了一个例子.其中我了解到还有另一个我将使用的异步下载功能.它是在调试窗口中显示进度以及进度条控件的好方法.随意评论
Imports Renci.SshNet Imports System.IO Imports Renci.SshNet.Sftp Dim fileSize As Long Private Sub btnGo_Click(sender As Object,MsgBoxStyle.Critical) Finally Me.Cursor = Cursors.Default End Try End Sub (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |