社区
VB基础类
帖子详情
怎样利用wininet.dll 获得网上文件大小。
qubolz
2003-01-07 07:41:45
怎样利用wininet.dll 获得网上文件大小。
就是想不用控件实现获得网络文件的大小。谢谢了。
...全文
119
2
打赏
收藏
怎样利用wininet.dll 获得网上文件大小。
怎样利用wininet.dll 获得网上文件大小。 就是想不用控件实现获得网络文件的大小。谢谢了。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fling_boy
2003-01-07
打赏
举报
回复
如何从Internet上有效而稳定地下载文件 ,这是很多网络应用程序要考虑的重要问题,本文提供的代码段针对这个问题进行了初步的探索。希望能够抛砖引玉,对各位编程人员有所帮助。
UINT InternetGetFile (HINTERNET IN hOpen,
CHAR *szUrl,
CHAR *szFileName,
HWND hwndProgress,
int idStatusText,
int idProgressBar);
这里返回值的类型为UINT,如果成功返回0,否则返回非零值。为了使用这个函数,只需要提供一个有效的HINTERNET句柄,这个句柄可以通过标准的InternetOpen()掉用来获得。如果你愿意的话,你还可以将一个句柄提供给进度窗口(ID为一静态控制的标示符,用来显示状态),在这个函数的头几行代码中声明一些变量。
DWORD dwSize;
这个变量被用于存储每次调用InternetReadFile读取了多少数据。
CHAR szHead[] = "Accept: */*\r\n\r\n";
用于存储多个HTTP头信息。如果在调用InternetOpenUrl时不传递着个头信息,则只允许你打开文本文件!
VOID* szTemp[16384];
缓冲变量,可以存储来自Internet的16KB的文件数据。
HINTERNET hConnect;
这是一个HINTERNET句柄,包含请求结果(来自InternetOpenUrl)
FILE * pFile;
标准的C文件句柄(必须包含stdio.h)。如果你愿意,可以使用Win32处理文件的API
if (!(hConnect = InternetOpenUrlA (hOpen, szUrl, szHead, lstrlenA (szHead), INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD, 0)))
{
return INTERNET_ERROR_OPENURL;
}
此调用可以打开一个使用URL的Internet文件句柄。标志表示这个文件总是被读取,而不是缓存(cache)。如果失败,则此函数返回错误,你可以给定INTERNET_ERROR_OPENURL任何值。必须为这个函数定义所有的错误信息。也可以用一个数字替代。
if(!(pFile = fopen(szFileName, "wb" )))
{
return INTERNET_ERROR_FILEOPEN;
}
此调用根据给定的文件名打开文件。如果失败则返回另一个用户定义的错误。
DWORD dwByteToRead = 0;
DWORD dwSizeOfRq = 4;
DWORD dwBytes = 0;
这三个值分别存储文件的大小,HttpQueryInfo内容的大小和总共读取的字节数。
if (!HttpQueryInfo(hConnect, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, (LPVOID)&dwByteToRead, &dwSizeOfRq, NULL))
{
dwByteToRead = 0;
}
此调用可以获得文件的大小。如果失败则dwByteToRead被置为0,并且当文件被下载时不会显示百分比和总数
DWORD start;
DWORD end;
DWORD time;
time = 10;
start = timeGetTime();
使用这些bit必须包含mmsystem.h并链接winmm.lib,它们用于时间选择,告诉用户下载的速度。例子代码只统计了下载速度,你可以扩展这个功能,比如估计还剩多少时间。
do
{
if (!InternetReadFile(hConnect, szTemp, 16384, &dwSize))
{
fclose (pFile);
return INTERNET_ERROR_READFILE;
}
此调用循环中,每次下载一个16KB的数据块。如果download请求失败,则文件被关闭并返回错误。
if (!dwSize)
break;
else
fwrite(szTemp, sizeof(char), dwSize, pFile);
如果dwSize为0,则意味着一个EOF,循环退出。否则由InternetReadFile读取的数据内容被写到本地文件中。
dwBytes+=dwSize;
if(dwByteToRead && hwndProgress)
{
SendDlgItemMessageA(hwndProgress, idProgressBar, WM_USER+2, (dwBytes*100)/dwByteToRead, 0);
UpdateWindow(hwndProgress);
}
这个代码中,dwBytes是从文件读取的数据量,它不断增加,如果文件长度是有效的,则进度窗口句柄被指定,进度条被更新已表示下载进度。
FLOAT fSpeed = 0;
fSpeed = (float)dwBytes;
fSpeed /= ((float)time)/1000.0f;
fSpeed /= 1024.0f;
这些bit代码用于根据所花时间计算下载速度和读取的数据量。
if(hwndProgress)
{
char s[260];
sprintf(s, "%d KB / %d KB @ %1.1f KB/s", dwBytes/1024, dwByteToRead/1024, fSpeed);
SetDlgItemTextA(hwndProgress, idStatusText, s);
UpdateWindow(hwndProgress);
}
设置和处理进度窗口的状态文本,表示下载的文件大小和下载速度。
end = timeGetTime();
time = end - start;
if(time == 0)
time = 10;
时间被更新
} // do
while (TRUE);
循环结束
fflush (pFile);
fclose (pFile);
return 0;
}
最后,函数结束,关闭文件并清除硬件驱动的缓冲。返回0表示成功。
feixuehenshui
2003-01-07
打赏
举报
回复
up
Win
inet
API 写的下载器类,可获取文件名,下载,等等。
把.h文件里面的代码放出来一下,CPP就不放了,自己下载哦。 #ifndef Download_h__ #define Download_h__ #include <
win
inet
.h> #pragma comment(lib,"
win
inet
.lib") class CHttpGet { public: //测试网络是否...
Win
form文件下载之
Win
INet
**
Win
form文件下载之
Win
INet
** 在
Win
dows应用程序开发中,有时我们需要实现文件的下载功能。在.NET Framework中,我们可以
利用
各种方式来实现这一需求,其中一种常见的方法就是使用
Win
INet
API。
Win
INet
是Microsoft...
易语言-http进度下载 断点续传易语言
.
DLL
命令 读Internet文件_, 整数型, "
Win
inet
.
dll
", "InternetReadFile" .参数 Internet地址句柄, 整数型 .参数 数据缓冲区, 字节集 .参数 读取大小, 整数型 .参数 读取首地址, 整数型, 传址 .
DLL
命令 呼叫窗口函数...
使用大的 POST 请求 HttpSendRequestEx
此示例演示在 Internet Explorer 4.0
Win
Inet
.
dll
中引入并记录在 Internet 客户端 SDK 中的 HttpSendRequestEx 函数的正确用法。 原始的 HttpSendRequest 函数有这样一个重大限制: 所有请求的数据都有一个缓冲区...
Acronis Disk Director 11 PE 绿色版
- `
win
inet
.
dll
`:互联网网络库,可能用于软件的网络通信或更新检查。 - `msvcr80.
dll
`、`msvcp80.
dll
`:Microsoft Visual C++ 运行时库,为程序提供必要的运行环境。 综上所述,Acronis Disk Director 11 PE 绿色...
VB基础类
7,785
社区成员
197,585
社区内容
发帖
与我相关
我的任务
VB基础类
VB 基础类
复制链接
扫一扫
分享
社区描述
VB 基础类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章