#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);
}
}
я загрузил файл трижды в обоих случаях.
Комментарии:
1. Что произойдет, если вы загрузите файл с помощью обычного FTP-клиента? Загружается ли обновленная версия или старая (кэшированная) версия?
2. если я использую ftp-клиент, он загружает обновленный файл. я тестирую эту программу, создав локальный ftp-сервер (используя filezilla).
3. Похоже, вам нужен либо
INTERNET_FLAG_RELOAD
флаг, либоINTERNET_FLAG_RESYNCHRONIZE
flag. Просто ИЛИ с вашимFTP_TRANSFER_TYPE_BINARY
флагом в вашем вызовеFtpGetFile
.4. пробовал все вышеперечисленные решения, но проблема все та же.
5. Похоже, у вас есть параметры fFailIfExists и
FtpGetFile
dwFlagsAndAttributes в неправильном порядке.