Помогите найти сабж. Мне нужна докачка с FTP, я что то не нашёл. Может её вообщенет
Здравствуйте, Alex, Вы писали:
A>Помогите найти сабж. Мне нужна докачка с FTP, я что то не нашёл. Может её вообщенет
Есть, просто вы неправильно искали

FtpCommand же есть — отправляете команду REST и вперед
З.Ы. Если будет нужно — могу на работе кусочек кода глянуть и запостить... Правда, если время будет...
... << RSDN@Home 1.1.3 stable >>
Здравствуйте, AlexEagle, Вы писали:
[]
F>>З.Ы. Если будет нужно — могу на работе кусочек кода глянуть и запостить... Правда, если время будет...
AE>Запость и мне
Вот кусок кода, выдранный наживую из проекта — как раз используется докачка по FTP:
String command;
command.sprintf("REST %u", FStream->Position);
HINTERNET hResponse = NULL;
InternetSetStatusCallback(FConnectHandle,InternetStatusCallback);
BOOL Ret = FtpCommand(FConnectHandle,
FALSE,
FBinary ? FTP_TRANSFER_TYPE_BINARY : FTP_TRANSFER_TYPE_ASCII,
command.c_str(),
(DWORD_PTR) this,
&hResponse);
if(!Ret)
{
if(FCancelled)
return SetErrorCode(WINFTP_CANCELLED);
else
return SetErrorCode();
}
command.sprintf("RETR %s", FRemoteFileName.c_str() );
Ret = FtpCommand(FConnectHandle,
TRUE,
FBinary ? FTP_TRANSFER_TYPE_BINARY : FTP_TRANSFER_TYPE_ASCII,
command.c_str(),
(DWORD_PTR) this,
&hResponse);
... << RSDN@Home 1.1.4 beta 6 rev. 433>>
Здравствуйте, Flamer, Вы писали:
F>Вот кусок кода, выдранный наживую из проекта — как раз используется докачка по FTP:
Дело в том, что используемый вами код
::FtpCommand( ..., "REST xxx", ... );
::FtpCommand( ..., "RETR ssssss", ... );
приводит к генерации того же набора команд что и
::FtpCommand( ..., "REST xxx", ... );
::FtpOpenFile( ..., "ssssss", ... );
а именно:
REST xxx
TYPE x
PORT x,x,x,x,x,x
SIZE ssssss
RETR ssssss
Правда во втором случае команда SIZE имеет правильный параметр, а не кракозябры
Это можно увидеть, выполнив докачку с
Ftp-сервера Pablo van der Meer-а
Как бы то ни было, такой "рабочий" код никак не приводит к 100%-правильной докачке, для которой последовательность команд должна быть такой:
TYPE x
PORT x,x,x,x,x,x
REST xxx
RETR ssssss
если конечно я правильно понял
некоего Aler-aАвтор: aler
Дата: 11.09.03
Безусловно, приведенный вами код работает на большинстве FTP-серверов, но попадаются и такие, которые будут отдавать файл "с нуля", с одним из которых я и столкнулся
Возвращаясь к вопросу — есть ли способ заставить wininet передать указанную последовательность команд... а то тот FtpCommand как оказалось не совсем передача команды.
Обсуждение вроде бы затихло 2 года назад.. Но оно мне очень помогло, поэтому хочу добавить..
.
.
.
FtpCommand(hConnect, 0, 0, TEXT("SIZE file.txt"), 0, 0);
InternetGetLastResponseInfo(&dw, RespBuf, &dwCount);
//RespBuf указывает на "213 15566784"
TCHAR *endresp(_tcsstr(RespBuf, TEXT("\r\n")));
FileSize = _tcstoi64(RespBuf+4, &endresp, 10);
HINTERNET hFile;
FtpCommand(hConnect, true, FTP_TRANSFER_TYPE_BINARY, TEXT("TYPE I\r\nPASV\r\nREST 100\r\nRETR\r\n"), 0, &hFile);
while(InternetReadFile(hFile, DataBuf, DataBufSize, &dwCountFF))
{
.
.
.