Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по FtpGetFile


Страницы:   1 2 3 4 5 6

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';

О_о ?


Страницы:   1 2 3 4 5 6

Наверх

Титульная страница Поиск, карта сайта Написать письмо