FtpGetFile не загружает обновленный файл

#c #ftp #wininet

#c #ftp #wininet

Вопрос:

Я написал ниже код для загрузки файла с FTP-сервера в указанном, проблема в том, что всякий раз, когда я изменяю файл на FTP-сервере, программирование не загружает измененный файл, он все еще загружает старый файл, я думаю, что это из-за кэширования, я погуглил, но не получил ответа, я использую компилятор gcc в Windows с wininet.

 using namespace std;
char USER_NAME[100]="test",
    PASSWORD[100]="test",
    HOST_NAME[100]="localhost";

int main()
{

    while(1){
            int t=0;
            int z=0;
         HINTERNET hint,hftp;
        z=DeleteFile("aaa.txt");
        cout<<"file status="<<z<<endl;
        Sleep(5000);
        hint = InternetOpen("FTP",INTERNET_OPEN_TYPE_PRECONFIG,0,0,INTERNET_FLAG_ASYNC);
        hftp = InternetConnect(hint,"localhost",INTERNET_DEFAULT_FTP_PORT,USER_NAME,PASSWORD,INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);
        t=FtpGetFile(hftp,"/config/config.txt","aaa.txt",FALSE,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_BINARY,0);
        printf("//t value=:%dn",t);
        InternetCloseHandle(hftp);
        InternetCloseHandle(hint);
        Sleep(20000);
    }

}
  

вот скриншот журнала сервера для моей программы

скриншот журнала сервера для FTP-клиента filezilla.

я загрузил файл трижды в обоих случаях.

Комментарии:

1. Что произойдет, если вы загрузите файл с помощью обычного FTP-клиента? Загружается ли обновленная версия или старая (кэшированная) версия?

2. если я использую ftp-клиент, он загружает обновленный файл. я тестирую эту программу, создав локальный ftp-сервер (используя filezilla).

3. Похоже, вам нужен либо INTERNET_FLAG_RELOAD флаг, либо INTERNET_FLAG_RESYNCHRONIZE flag. Просто ИЛИ с вашим FTP_TRANSFER_TYPE_BINARY флагом в вашем вызове FtpGetFile .

4. пробовал все вышеперечисленные решения, но проблема все та же.

5. Похоже, у вас есть параметры fFailIfExists и FtpGetFile dwFlagsAndAttributes в неправильном порядке.