怎样用一个API下载文件?

enmity 2002-09-24 01:46:31
是单纯一个,没有任何其它API或者控件
...全文
173 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chanet 2002-10-03
  • 打赏
  • 举报
回复
up
tg123 2002-10-03
  • 打赏
  • 举报
回复
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Public Function DownloadFile(URL As String, LocalFilename As String) As Boolean
Dim lngRetVal As Long
lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
If lngRetVal = 0 Then DownloadFile = True
End Function
Private Sub Form_Load()
'example by Matthew Gates (Puff0rz@hotmail.com)
DownloadFile "http://www.allapi.net", "c:\allapi.htm"
End Sub
tdlin 2002-10-02
  • 打赏
  • 举报
回复
简单的问题就别麻烦我拉!:)
enmity 2002-09-29
  • 打赏
  • 举报
回复
楼上,我无话可以说了
haigenwong 2002-09-29
  • 打赏
  • 举报
回复
用winsock
Option Explicit

Dim stp As Long
Dim size As Long
Dim user As String
Dim passwd As String
Dim wantfile As String
Dim saveto As String

Private Sub Form_Load()
Winsock1.RemoteHost = "polar.wwb.noaa.gov" '指定连接主机
Winsock1.RemotePort = 21 '指定连接端口,FTP默认端口为23
user = "anonymous" '指定用户名"
passwd = "IEUser@" '指定密码
wantfile = "pub/waves/latest_run/nww3.all.grb" '指定想获取的文件
saveto = "c:\windows\desktop\nww3.all.grb" '指定保存地址

Winsock1.Connect
End Sub

Private Sub Winsock1_Connect()
stp = 0
Debug.Print "已连接,正在登陆..."
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim a As String
Winsock1.GetData a

Select Case stp
Case 0
If Left(a, 4) = "220 " Then
Winsock1.SendData "USER " & user & vbCrLf
stp = 1
End If
Case 1
If Left(a, 4) = "331 " Then
Winsock1.SendData "PASS " & passwd & vbCrLf
stp = 2
End If
Case 2
If Left(a, 4) = "230 " Then
Debug.Print "登陆成功!"
Winsock1.SendData "TYPE I" & vbCrLf
stp = 3
End If
Case 3
If Left(a, 4) = "200 " Then
Winsock1.SendData "PASV" & vbCrLf
stp = 4
End If
Case 4
If Left(a, 4) = "227 " Then
Winsock2.RemoteHost = Winsock1.RemoteHostIP
Winsock2.RemotePort = GetPort(a)
Winsock2.Connect
stp = 5
End If
Case 5
If Left(a, 4) = "213 " And Right(a, 2) = vbCrLf Then
size = Val(Right(a, Len(a) - InStr(a, " ") + 1))
Debug.Print "文件大小:"; size
Debug.Print "保存到:"; saveto
Open saveto For Binary As #1
Winsock1.SendData "RETR " & wantfile & vbCrLf
stp = 6
End If
Case 6
If Left(a, 4) = "150 " Then Debug.Print "正在接收文件..."
End Select

End Sub


Private Sub Winsock2_Connect()
Winsock1.SendData "SIZE /" & wantfile & vbCrLf
End Sub

Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim f() As Byte
Winsock2.GetData f
If size - LOF(1) < UBound(f) - LBound(f) + 1 Then
ReDim Preserve f(LBound(f) + (size - LOF(1)))
Put 1, , f
Close
stp = 5
Winsock1.SendData "BYE " & vbCrLf
Winsock1.Close
Winsock2.Close
Debug.Print "保存完毕!"
Else
Put 1, , f
End If


End Sub

Private Function GetPort(s As String) As Long
Dim a As Long, b As Long, temp As Long, temp2 As Long
temp = InStr(s, ",")
temp = InStr(temp + 1, s, ",")
temp = InStr(temp + 1, s, ",")
temp = InStr(temp + 1, s, ",") + 1
temp2 = InStr(temp + 1, s, ",") + 1
a = Val(Mid(s, temp, temp2 - 2))
b = Val(Mid(s, temp2, InStr(temp2, s, ")") - 1))
GetPort = a * 256 + b
End Function
TechnoFantasy 2002-09-29
  • 打赏
  • 举报
回复
Usage

MsgBox DownloadFile("http://www.vbworld.com", "c:\vbworld.htm")
Code

Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long

Public Function DownloadFile(URL As String, _
LocalFilename As String) As Boolean

Dim lngRetVal As Long

lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)

If lngRetVal = 0 Then DownloadFile = True

End Function
zqfleaf 2002-09-29
  • 打赏
  • 举报
回复
ftp 的api函数好像就是几个
第一步打开
第二步联接
第三步设置路径
第四步.....
如果非要放在一起那就把这几步放在一个模块中的一个函数中

Public Function getftpfile(IPaddress As String, username As String, password As String, filepath As String _
, filename As String, localpath As String, localfilename As String) As Boolean
Dim buff1 As String, buff2 As String
Dim num As Long
canc = False
buff1 = Space$(64): buff2 = Space$(128)
hInter = InternetOpen("wydrwtedr", 4, vbNullString, vbNullString, 0)
hInterSi = InternetConnect(hInter, IPaddress, 21, username, password, 1, 0, 0)
FtpSetCurrentDirectory hInterSi, filepath
FtpGetFile hInterSi, filename, localpath & "\" & localfilename, 1, 0
getftpfile = True
End Function
'=======================下面是用到的API函数=====================
Option Explicit
Public Declare Function FtpGetFile Lib "WinInet" Alias "FtpGetFileA" _
(ByVal hFtpSessions As Long, ByVal lpszRemoteFile As String, ByVal _
lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal _
dwLocalFlagAndAttributes As Long, ByVal dwInternetFlags As Long, _
ByVal dwContext As Long) As Long

Public Declare Function InternetOpen Lib "WinInet" Alias "InternetOpenA" _
(ByVal lpszAgent As String, ByVal dwAccessType As Long, ByVal lpszProxyName _
As String, ByVal lpszProxyBypass As String, ByVal dwFlags As Long) As Long

Public Declare Function InternetConnect Lib "WinInet" Alias "InternetConnectA" _
(ByVal hInternetSession As Long, ByVal lpszServerName As String, ByVal nServerPort _
As Integer, ByVal lpszUsername As String, ByVal lpszPassword As String, ByVal _
dwService As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long

Public Declare Function InternetCloseHandle Lib "WinInet" _
Alias "InternetCloseHandleA" (ByVal hInet As Long) As Long

Public Declare Function InternetGetLastResponseInfo Lib "WinInet" _
Alias "InternetGetLastResponseInfoA" (ByRef lpdwError As Long, _
ByVal lpszBuffer As String, ByRef lpdwBufferLength As Long) As Boolean

Public Declare Function FtpPutFile Lib "WinInet" Alias "FtpPutFileA" _
(ByVal hFtpSession As Long, ByVal lpszLocalFile As String, ByVal lpszNewRemoteFile _
As String, ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean

Public Declare Function GetLastError Lib "kernel32" () As Long

Public Declare Function FtpGetCurrentDirectory Lib "WinInet" Alias _
"FtpGetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszCurrentDirectoty _
As String, ByRef lpdwCurrentDirectory As Long) As Long

Public Declare Function FtpSetCurrentDirectory Lib "WinInet" Alias _
"FtpSetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory _
As String) As Boolean

Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _
"RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions _
As Long, ByVal samDesired As Long, phkResult As Long) As Long

Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Public Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As Long, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
Public Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Public Const REG_SZ = 1
Public Const REG_BINARY = 3
Public Const REG_DWORD = 4

Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
Public Const HKEY_PERFORMANCE_DATA = &H80000004
Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_DYN_DATA = &H80000006

Public Const REG_CREATED_NEW_KEY = &H1
Public Const REG_OPENED_EXISTING_KEY = &H2
Public ftpvr As Integer
Public firRun As Boolean





bcrun 2002-09-24
  • 打赏
  • 举报
回复
这个可以
URLDownloadToFile
enmity 2002-09-24
  • 打赏
  • 举报
回复
对!只需要一个!
fangboy 2002-09-24
  • 打赏
  • 举报
回复
不可能吧,只用一个?

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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