请问能否在读取文件之前知道文件的长度?这样才能在文件量大、速度慢的情况下估算出加载数据的百分比。
gdtt:
请问能否在读取文件之前知道文件的长度?这样就能在文件量大、速度慢的情况下估计下载数据的百分比。
我想可以。您可以在 msdn 对 wininet.dll 的描述中找到它。
gdtt:
在 /GET 请求前发送 /HEAD 请问能否在读取文件之前知道文件的长度?这是为了在文件量大、速度慢的情况下估计加载数据的百分比。
我完全赞成!这将是一篇非常有用的文章。
gdtt:
请问能否在读取文件之前知道文件的长度?这是为了在文件量大、速度慢的情况下估算下载数据的百分比。
如果服务器报告内容长度,则有可能。
要获取有关请求的信息,可以使用 wininet.dll 中的HttpQueryInfo 函数--该函数以字符串形式向指定数组返回所需的信息。
使用示例
在 #import 部分添加说明:
int HttpQueryInfoW(int hRequest,int dwInfoLevel,uchar &lpvBuffer[],int &lpdwBufferLength,int &lpdwIndex);
同时添加
#define HTTP_QUERY_CONTENT_LENGTH 5然后在调用 InternetOpenUrlW 并获取 hURL 后的代码中添加代码:
int BufLen=2048; int ind=0; uchar buf0[2048]; string s=""; int ContentSize_HttpQueryInfoW=0; int iRes; iRes=HttpQueryInfoW(hURL,HTTP_QUERY_CONTENT_LENGTH,buf0,BufLen,ind); if(iRes<=0) { Print("Error in call of HttpQueryInfoW()"); } else { s=""; for(int k=0;k<BufLen;k++) { s=s+CharToString(buf0[k]);} Print("HTTP_QUERY_CONTENT_LENGTH:",s); if (StringLen(s)>0) ContentSize_HttpQueryInfoW=StringToInteger(s); Alert("内容大小=",ContentSize_HttpQueryInfoW); }
也就是说,在开始下载(InternetReadFile)之前,我们就知道了内容的长度。
在当前版本的脚本中添加了此功能。
感谢您的努力!
它运行得非常好!
当我尝试运行它时,metatrader 出现致命错误并关闭。有什么解决方案吗?
我发现 Wininet 在 MT5 上次更新前可以正常工作。如果您找到解决这个问题的方法,请告诉我。
WININET_TEST:
这是一个演示如何使用WININET.DLL库从互联网上下载页面(文件)的简单实例。
作者: MetaQuotes Software Corp.