vb中使用"wininet.dll"下的API中怎么使用FtpOpenFile API函数
写了一个FTP工具,上传,下载,删除等功能已经完成,但我想在下载文件前获取该文件的大小,由于wininet.dll中有其FtpOpenFile ,FtpGetFileSize 这两个API函数
,FtpGetFileSize 调用前必须通过FtpOpenFile 来获取其文件的句柄,但我发现有些资料上FtpOpenFile函数为一个Sub并不返回任何值(如:Declare Sub FtpOpenFile Lib "wininet.dll" Alias "FtpOpenFileA" (ByRef hConnect As Long, ByVal lpszFileName As String, ByVal dwAccess As Long, ByVal dwFlags As Long, ByRef dwContext As Long),所以取不到文件句柄
附:FtpGetFileSize API函数
Declare Function FtpGetFileSize Lib "wininet.dll" (ByRef hFile As Long, ByRef lpdwFileSizeHigh As Long) As Long
希望大家能帮我看看这两个API函数是否正确,同时说说怎么调用API函数,最好给出例子,因为msdn上有这两个函数(在VC下的),但我使用时均不能得到想要的句柄,希望写过类似东西的高手给个建议.
问题点数:100、回复次数:5Top
1 楼cuizm(射天狼 http://www.j2soft.cn/)回复于 2003-09-02 14:16:40 得分 0
取文件大小不用专门的函数,在用FtpFindFirstFile函数与InternetFindNextFile函数遍历服务器上文件的时候就已经将文件的大小、日期等属性存在 WIN32_FIND_DATA 结构的变量里了,上这里取就行了~~Top
2 楼cuizm(射天狼 http://www.j2soft.cn/)回复于 2003-09-02 14:18:33 得分 0
Private Function vbGetFileSizeKBStr(fsize As Long) As String
On Error Resume Next
vbGetFileSizeKBStr = Format$(((fsize) / 1000) + 0.5, "#,###,###") & "kb"
End Function
Dim pData As WIN32_FIND_DATA
hFind = FtpFindFirstFile(hConnection, "*.*", pData, 0, 0)
或者
bRet = InternetFindNextFile(hFind, pData)
vbGetFileSizeKBStr(pData.nFileSizeHigh + pData.nFileSizeLow) '此函数返回大小Top
3 楼cuizm(射天狼 http://www.j2soft.cn/)回复于 2003-09-02 14:19:06 得分 100
Private Function vbGetFileDate(CT As FILETIME) As String
On Error Resume Next
Dim ST As SYSTEMTIME
Dim r As Long
Dim ds As Single
r = FileTimeToSystemTime(CT, ST)
If r Then
ds = DateSerial(ST.wYear, ST.wMonth, ST.wDay)
vbGetFileDate$ = Format$(ds, "YYYY/MM/DD")
Else
vbGetFileDate$ = ""
End If
End Function
vbGetFileDate(pData.ftLastWriteTime)Top
4 楼caoren5(草人)回复于 2003-09-03 08:48:45 得分 0
to cuizm(射天狼) :
非常感谢您所给的帮助,但我在用这个方法的时候发现这样一个问题,就在我在下载前取得文件的大小(pData.nFileSizeHigh + pData.nFileSizeLow只取文件的字节数)与下载到本地后我再通过FSO对象来读取时取得的大小不一样,而且相差较多(但文件内容已一致),取文件大小我主要用于检测下载完成后是否存在掉包的情况,所以我通过比较文件大小来实现!Top
5 楼prun(橄榄树)回复于 2003-09-21 20:19:08 得分 0
总算找到一帖关于WININET的Top



