CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  API

vb中使用"wininet.dll"下的API中怎么使用FtpOpenFile API函数

楼主caoren5(草人)2003-09-02 13:46:14 在 VB / 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

相关问题

  • wininet api
  • Clarify the concept of DLL,API,LIB,COM,OBJ
  • 关于第三方DLL(API)
  • WinInet API的一个奇怪的问题
  • wininet api 的异步操作问题
  • 使用WinInet API 进行异步编程
  • API错误,找不到DLL入口点?
  • 注册DLL的API函数是什么?
  • HOOK的DLL使用API的问题
  • api

关键词

  • win32
  • 函数
  • 文件
  • api
  • dll
  • ftpopenfile
  • ftpgetfilesize
  • wininet
  • 句柄
  • 使用

得分解答快速导航

  • 帖主:caoren5
  • cuizm

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo