用vb.net怎么实现ftp下载的功能

taotie1225 2009-04-20 10:32:43
vb.net2003环境,有一个csv的文档记录ftp路径,要求导入此文档,然后实现下载。
不知是否表达清楚,第一次接触,多多指教。用到什么类,什么方法等,请细节些,顶的都给分
...全文
658 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
taotie1225 2009-04-22
  • 打赏
  • 举报
回复
在下载的过程中,怎么告诉用户,现在已经连上服务器了,正在验证密码,正在下载第几个文件等这些返回信息呢?
taotie1225 2009-04-21
  • 打赏
  • 举报
回复
8楼的,我用的是2003的,没有FtpWebRequest 这些吧
LYDF4151 2009-04-21
  • 打赏
  • 举报
回复
'下载文件的URI
Dim u As New Uri("ftp://192.168.1.4/g4l-v0.29.iso")
'设定下载文件的保存路径
Dim fso As New FolderBrowserDialog
fso.ShowDialog() ' = Windows.Forms.DialogResult.OK
Dim downFile As String = fso.SelectedPath + "\g4l-v0.29.iso"

'FtpWebRequest的作成
Dim ftpReq As System.Net.FtpWebRequest = _
CType(System.Net.WebRequest.Create(u), System.Net.FtpWebRequest)
'设定用户名和密码
ftpReq.Credentials = New System.Net.NetworkCredential("mis", "rml755")
'MethodにWebRequestMethods.Ftp.DownloadFile("RETR")设定
ftpReq.Method = System.Net.WebRequestMethods.Ftp.DownloadFile
'要求终了后关闭连接
ftpReq.KeepAlive = False
'使用ASCII方式传送
ftpReq.UseBinary = False
'设定PASSIVE方式无效
ftpReq.UsePassive = False

'判断是否继续下载
'继续写入下载文件的FileStream
Dim fs As System.IO.FileStream
If System.IO.File.Exists(downFile) Then
'继续下载
ftpReq.ContentOffset = New System.IO.FileInfo(downFile).Length
fs = New System.IO.FileStream( _
downFile, System.IO.FileMode.Append, System.IO.FileAccess.Write)
Else
'一般下载
fs = New System.IO.FileStream( _
downFile, System.IO.FileMode.Create, System.IO.FileAccess.Write)
End If

'取得FtpWebResponse
Dim ftpRes As System.Net.FtpWebResponse = _
CType(ftpReq.GetResponse(), System.Net.FtpWebResponse)
'为了下载文件取得Stream
Dim resStrm As System.IO.Stream = ftpRes.GetResponseStream()
'写入下载的数据
Dim buffer(1024) As Byte
While True
Dim readSize As Integer = resStrm.Read(buffer, 0, buffer.Length)
If readSize = 0 Then
Exit While
Me.ProgressBar1.Value = 100
Else
If Me.ProgressBar1.Value < Me.ProgressBar1.Maximum Then
Me.ProgressBar1.Value += 1
End If

End If



fs.Write(buffer, 0, readSize)
End While
fs.Close()
resStrm.Close()

'表示从FTP服务器被送信的状态
Console.WriteLine("{0}: {1}", ftpRes.StatusCode, ftpRes.StatusDescription)
'关闭连接
ftpRes.Close()
chenhaohf 2009-04-20
  • 打赏
  • 举报
回复
用my啊 多简单 什么都不用考虑
taotie1225 2009-04-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bw555 的回复:]
VB.NET codeImports System.Net
'下载代码
Dim dfile As New WebClient
dfile.DownloadFile(Me.M_Url, Me.M_FileName)
'M_Url为下载的网址,M_FileName为本地保存的路径
[/Quote]

我在浏览器地址写:ftp://ftptest:ftptest@localhost/
是能看到文件的,如果要把这些文件下到d盘下,怎么写?
一只熊猫 2009-04-20
  • 打赏
  • 举报
回复
最简单的办法:


Dim Ftp_ip as string = "xxx.xxx.xxx.xxx" '从csv文件中取得FTP地址及文件名路径
Dim filename as String= "test.txt"

My.Computer.Network.DownloadFile("ftp://" & FTP_ip, filename) 'FTP允许匿名访问
My.Computer.Network.DownloadFile("ftp://" & FTP_ip, filename ,Ftp_user,Ftp_pwd,True) 'FTP需要用户验证的
bw555 2009-04-20
  • 打赏
  • 举报
回复
Imports System.Net
'下载代码
Dim dfile As New WebClient
dfile.DownloadFile(Me.M_Url, Me.M_FileName)
'M_Url为下载的网址,M_FileName为本地保存的路径
messi_yang 2009-04-20
  • 打赏
  • 举报
回复
先頂再看。我也有同樣的問題啊。
也還沒有解決呢
taotie1225 2009-04-20
  • 打赏
  • 举报
回复
Public Sub DownloadFile(ByVal sFileName As String, _
ByVal sLocalFileName As String, _
ByVal bResume As Boolean)
Dim st As Stream
Dim output As FileStream
Dim cSocket As Socket
Dim offset, npos As Long
If (Not (m_bLoggedIn)) Then
Login()
End If
SetBinaryMode(True)
If (sLocalFileName.Equals("")) Then
sLocalFileName = sFileName
End If
If (Not (File.Exists(sLocalFileName))) Then
st = File.Create(sLocalFileName)
st.Close()
End If
output = New FileStream(sLocalFileName, FileMode.Open)
cSocket = CreateDataSocket()
offset = 0
If (bResume) Then
offset = output.Length
If (offset > 0) Then
'Send an FTP command to restart.
SendCommand("REST " & offset)
If (m_iRetValue <> 350) Then
offset = 0
End If
End If
If (offset > 0) Then
npos = output.Seek(offset, SeekOrigin.Begin)
End If
End If
'Send an FTP command to retrieve a file.
SendCommand("RETR " & sFileName)
If (Not (m_iRetValue = 150 Or m_iRetValue = 125)) Then
MessageString = m_sReply
Throw New IOException(m_sReply.Substring(4))
End If
Do While (True)
m_aBuffer.Clear(m_aBuffer, 0, m_aBuffer.Length)
m_iBytes = cSocket.Receive(m_aBuffer, m_aBuffer.Length, 0)
output.Write(m_aBuffer, 0, m_iBytes)
If (m_iBytes <= 0) Then
Exit Do
End If
Loop
output.Close()
If (cSocket.Connected) Then
cSocket.Close()
End If
ReadReply()
If (Not (m_iRetValue = 226 Or m_iRetValue = 250)) Then
MessageString = m_sReply
Throw New IOException(m_sReply.Substring(4))
End If
End Sub


我用了 ftpClient.DownloadFile("ftp://localhost", "C:\Documents and Settings\Administrator\bb.xls", False),报错

未处理的“System.IO.IOException”类型的异常出现在 WindowsApplication1.exe 中。

其他信息: ftp://localhost: The filename, directory name, or volume label syntax is incorrect.
taotie1225 2009-04-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Going1981 的回复:]
最简单的办法:


VB.NET code
Dim Ftp_ip as string = "xxx.xxx.xxx.xxx" '从csv文件中取得FTP地址及文件名路径
Dim filename as String= "test.txt"

My.Computer.Network.DownloadFile("ftp://" & FTP_ip, filename) 'FTP允许匿名访问
My.Computer.Network.DownloadFile("ftp://" & FTP_ip, filename ,Ftp_user,Ftp_pwd,True) 'FTP需要用户验证的
[/Quote]

在你博客中,有个自定义的类,myclient,你是怎么调用DownloadFile这个方法的?
假设要下载的文件放在C:\Inetpub\ftproot\a.txt,要下载到d:\a.txt下,我用了ftpClient.DownloadFile("a1.txt", "a1.txt")报错了,请问如何调用?

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧