У вас есть «Гейзенбаг», который исчезает, когда вы пытаетесь его найти. Не заблуждайтесь, проблема все еще существует, и вам do необходимо ее найти.
первая вещь, которую вы должны сделать, это проверить код возврата InternetReadFile
.
Кроме того, вы должны не предполагать, что при успешном чтении будут возвращены полные 100 байтов, даже если их будет еще больше. doco заявляет:
Чтобы обеспечить получение всех данных, приложение должно продолжать вызывать функцию InternetReadFile
, пока функция не вернет TRUE
и параметр lpdwNumberOfBytesRead
не станет равным нулю.
:::
Кроме того, преобразованные строки могут не полностью заполнять буфер, поэтому InternetReadFile
может вернуть с меньшим количеством данных в lpBuffer
, чем запрошено.
Другими словами, я бы добавил:
BOOL rc;
и поменяйте два:
InternetReadFile(hURL, file, 100, &read);
заявления для:
rc = InternetReadFile(hURL, file, 100, &read);
тогда ваш цикл становится:
while ((!rc) || (read > 0)) // I *think* that's right.