我试图在C ++中使用WinHTTP获取文件的内容。该文件是XML文件,由服务器上的可执行文件生成。
init,connect甚至读取指定服务器地址上的文件的代码正在运行。
// Connect to internet.
m_hInternet = InternetOpen(L"HTTPRIP",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
// Check if worked.
if( !m_hInternet )
return;
// Connect to selected URL.
m_hUrl = InternetOpenUrlA(m_hInternet, strUrl.c_str(), NULL, 0, INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RESYNCHRONIZE, 0);
// Check if worked.
if( !m_hUrl )
return;
if( InternetReadFile(m_hUrl, buf, BUFFER_SIZE, &bytesread) && bytesread != 0 )
{
// Put into std::string.
strData = std::string(buf,buf+bytesread);
}
现在我要更新文件(同一地址)。服务器以50Hz更新文件,我希望我的代码只有在服务器更新后才能进行ReadFile。 InternetReadFile可以做那种事情吗?也许使用FLAG但我在MSDN上找不到任何东西。
感谢您的帮助。
答案 0 :(得分:1)
HTTP协议中没有办法让你直接这样做,因此在WinHTTP中没有这样的功能。最简单的解决方案可能是下载文件并查看它是否已更改,如果文件相对较小,或者文件很大,请让写入文件的服务器在其旁边写入时间戳,校验和或计数器增量文件
然后您的代码将下载校验和文件,看它是否已更改,并在这种情况下下载原始文件。
或者另一种解决方案是将时间戳或类似数据放在 XML文件的开头,如果时间戳(或校验和)没有更新,则停止下载文件。 (当然,它有自己的缺点,你可能需要编写自己的解析器。)
答案 1 :(得分:1)
P.S。我怀疑每秒读取一些文件是否真的有意义。