白天是遇到一个windows系统自带的串口控件问题,老是在打开串口失败后弹出对话框,后来加了个异常捕获,解决了这一问题。
现在又遇到这个问题,感觉用别人封装的类就是不爽,首先还得熟悉结构,查阅文档,真正浪费时间。
以后还是不贪这种小便宜,不然,又会像这样,原本想节约时间,结果把本儿都赔进去了。
CInternetFile获取服务器端文件大小的方法:
1。GetLength()
不行,貌似它获取的是缓冲区内的数据大小,最大8192字节。
2。Seek()
不行,经他人验证不行,我也就懒得试了。
3。QueryOption()
获取的居然是乱码。
ULONG file_total_size=0;
TCHAR szContentLength[64]={0};
ULONG dwInfoSize = 64;
file->QueryOption(HTTP_QUERY_CONTENT_LENGTH, szContentLength, &dwInfoSize);
似乎没有办法获取到大小。
使用HINTERNET获取倒是可以,
ULONG file_total_size=0;
TCHAR szContentLength[64]={0};
ULONG dwInfoSize = 64;
::HttpQueryInfo(m_hFile, HTTP_QUERY_CONTENT_LENGTH, szContentLength, &dwInfoSize, NULL);
可是,怎么获取到CInternetFile的m_hFile成员,这倒是一个历史性问题。
4。GetStatus()
不行,得到CFileStatus之后,里面的成员m_size一直是零。
现在又不好把这段代码删除,因为自己以前写的一个从HTTP服务器断点续传下载文件的代码还一直没有被进行稳定性确认,不敢替换;改用其他人的代码吧,那些老兄总是把这么一个简单的问题搞得很复杂,又是回调函数,又是线程处理,替换的话,改动太大。
【注】:
ULONG file_total_size=0;
file_total_size=file->SeekToEnd();
file->SeekToBegin();
这就是解决办法!!!