gpt4 book ai didi

C++ WinINet InternetReadFile 函数刷新

转载 作者:行者123 更新时间:2023-11-30 03:55:38 24 4
gpt4 key购买 nike

我正在尝试使用 C++ 中的 WinHTTP 获取文件的内容。该文件是一个 XML 文件,由服务器上的可执行文件生成。

用于初始化、连接甚至读取指定服务器地址上的文件的代码正在运行。

// 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 的频率更新文件,我希望我的代码只有在服务器更新后才能读取文件。 InternetReadFile 可以做那种事情吗?也许有一个 FLAG,但我在 MSDN 上没有找到任何东西。

感谢您的帮助。

最佳答案

在 HTTP 协议(protocol)中没有办法让你直接这样做,因此在 WinHTTP 中没有这样的功能。最简单的解决方案可能是下载文件并查看它是否已更改,如果文件相对较小,或者如果文件很大,让写入文件的服务器在其旁边写入时间戳、校验和或计数器递增文件.

然后您的代码将下载校验和文件,查看它是否已更改,在这种情况下下载原始文件。

或者另一种解决方案是将时间戳或类似数据放在 XML 文件的开头,如果时间戳(或校验和)未更新,则停止下载文件。 (这当然有其自身的缺点,您可能必须编写自己的解析器。)

关于C++ WinINet InternetReadFile 函数刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28960308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com