![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по FtpGetFile
SortoVaritu © (2009-06-19 10:17:00)Вопрос в следующем. На FTP лежит несколько файлов. Эти несколько файлов являются разрезанным архивом rar. При использовании FTPGetFile файлы скачиваются на мой компьютер. НО при попытке их собрать в архив имеем ошибку контрольной суммы. Файлы по 100 МБ. Для доступа к FTP используется прокси. В чем может быть проблема?
Сергей М. (2009-06-22 15:22:00) [41]Правильно понимаешь
SortoVaritu (2009-06-22 15:12:00) [42]Я так понимаю в последнем параметре нужно указать адрес моего хэндла hFTP, дабы функция по этому адресу вывела мне сам хэндл.
clickmaker (2009-06-22 14:32:00) [43]да можно и так
function FtpCommand(
hConnect: HINTERNET;
fExpectResponse: BOOL;
dwFlags: DWORD;
lpszCommand: PChar;
dwContext: DWORD;
phFtpCommand: PHINTERNET): BOOL;
stdcall; external 'wininet.dll' name 'FtpCommandA';
Сергей М. (2009-06-22 14:24:00) [44]
> SortoVaritu © (22.06.09 13:42) [63]
что тебе не понятно в [59] ?
SortoVaritu (2009-06-22 13:42:00) [45]Что то я понять не могу.
FtpCommand(hFtp,true,FTP_TRANSFER_TYPE_ASCII,
PChar('LIST'),0,phfile); где phfile:PHinternet. Почему тогда ошибка выпрыгивает. Ведь phfile это адрес где записан хэндл. В чем тогда проблема состоит.
SortoVaritu (2009-06-22 13:36:00) [46]То есть если записать так
phfile:=@hfile;
FtpCommand(hFtp,true,FTP_TRANSFER_TYPE_ASCII,
PChar('LIST'),0,phfile);
будет верным, т.к
FtpCommand(.., @hFile) компилятор ругается на несовпадение типов
Сергей М. (2009-06-22 13:27:00) [47]
> что должна возвращать функция Хэндл или поинтер
Она должна вернуть хэндл, записав его по адресу, переданному последним параметром.
SortoVaritu (2009-06-22 13:17:00) [48]Будет ли правильным:
function FtpCommand(
hConnect: HINTERNET;
fExpectResponse: BOOL;
dwFlags: DWORD;
lpszCommand: PChar;
dwContext: DWORD;
var phFtpCommand: PHINTERNET): BOOL;
stdcall; external 'wininet.dll' name 'FtpCommandA';
procedure TForm1.Button1Click(Sender: TObject);
var
phFile :PHINTERNET;
hFile,hftp:HINTERNET;
begin
.......
phfile:=@hfile;
FtpCommand(hFtp,true,FTP_TRANSFER_TYPE_ASCII,
PChar('LIST'),0,phfile);
.......
end;
Сергей М. (2009-06-22 13:16:00) [49]
> непонятно, что должна возвращать функция Хэндл или поинтер
Читаешь первоисточник - MSDN - и все становится понятным:
__out HINTERNET *phFtpCommand
..
phFtpCommand [out]
A pointer to a handle that is created if a valid data socket is opened. The fExpectResponse parameter must be set to TRUE for phFtpCommand to be filled.
Т.е. если
var
hFile: HINTERNET;
то при
var hFtpCommand: HINTERNET
вызов такой:
FtpCommand(.., hFile)
а при
pFtpCommand: PHINTERNET
вызов уже иной:
FtpCommand(.., @hFile)
SortoVaritu (2009-06-22 13:05:00) [50]FtpCommand(m_hFtpSession,true,FTP_TRANSFER_TYPE_ASCII,
PChar('NLST'),0,@data_handle) Это в примерет так написано.
@data_handle - Это ведь и есть поинтер для Хэндла или я ошибаюсь.
SortoVaritu (2009-06-22 13:02:00) [51]Этот прототип отсюдава взят
http://www.cryer.co.uk/brian/delphi/wininet/example_ftpcommand.htm
Только я пробовал менять var hFtpCommand: PHINTERNET на var hFtpCommand: HINTERNET. Результат тот же. Просто на самом деле непонятно, что должна возвращать функция Хэндл или поинтер?
Сергей М. (2009-06-22 12:55:00) [52]Ясно.
Выкинь в топку свой прототип - его формировал кто-то без головы на плечах.
function FtpCommand(
hConnect: HINTERNET;
fExpectResponse: BOOL;
dwFlags: DWORD;
lpszCommand: PChar;
dwContext: DWORD;
var hFtpCommand: HINTERNET): BOOL;
stdcall; external 'wininet.dll' name 'FtpCommandA';
SortoVaritu (2009-06-22 12:53:00) [53]может быть
phFile:=@hFile;
FtpCommand(hFtp,true,FTP_TRANSFER_TYPE_BINARY,
PChar('RETR '+MyFile),0,phFile)
SortoVaritu (2009-06-22 12:50:00) [54]PHINTERNET=^HINTERNET
Сергей М. (2009-06-22 12:46:00) [55]А как объявлен PHINTERNET ?
SortoVaritu (2009-06-22 12:41:00) [56]FtpCommand(hFtp,true,FTP_TRANSFER_TYPE_BINARY,
PChar('RETR '+MyFile),0,hFile). Хорошо hFile Это поинтер. А как тогда создать хэндл?
Сергей М. (2009-06-22 12:30:00) [57]
> SortoVaritu © (22.06.09 12:14) [47]
Судя по этому прототипу у тебя и 'LIST' не должна работать)
brother (2009-06-22 12:20:00) [58]вообще, я думал это хэндлы, но
> hFTP: HINTERNET а hFile: PHINTERNET. В чем разница?
хэндл и поинтер?
SortoVaritu (2009-06-22 12:18:00) [59]Поясните еще hFTP:HINTERNET а hFile:PHINTERNET. В чем разница?
brother (2009-06-22 12:17:00) [60]> FtpCommand(hFtp,true,FTP_TRANSFER_TYPE_BINARY,
> PChar('RETR '+MyFile),0, hFile)
> Функция вызывается вызывается следующим образом
>
> function FtpCommand(
> hConnect: HINTERNET;
> fExpectResponse: BOOL;
> dwFlags: DWORD;
> lpszCommand: PChar;
> dwContext: DWORD;
> var phFtpCommand: PHINTERNET): BOOL;
> stdcall; external 'wininet.dll' name 'FtpCommandA';
О_о ?