Подскажите пожалуйста. API, не работает кусок кода

 

Подскажите, пытаюсь средствами wininet.dll считать файл с ФТП.

Фтп "заведомо исправный", файл, который пытаюсь читать, есть. Права на чтение (да и на все) выставлены.

Как я понимаю проблема в FtpGetFileA(), так как возвращает false и соответственно срабатывает Alert("Ошибка при вызове FtpGetFileA()"). Где может быть ошибка?

Заранее спасибо.

добавлю- пользуюсь:

описание FtpGetFile

http://ms.by.ru/HTML/40.htm


#import "wininet.dll"
  int  InternetOpenA(string sAgent, int lAccessType, string sProxyName = "", string sProxyBypass = "", int lFlags = 0);
  bool FtpGetFileA(int hSession, string FileNameServer, string FileNameLocal, bool Boolean, int lFlags =0, int lFlags =1, int lFlags = 0);
  int  InternetConnectA( int hInternetSession, string FTPURL, int port, string login, string password, int FTPflag, int lFlags = 0, int lFlags = 0);
  int  InternetCloseHandle(int hInet); 

#import
//#define INTERNET_FLAG_NO_CACHE_WRITE    0x04000000  // don't write this item to the cache
//#define INTERNET_FLAG_RELOAD            0x80000000  // retrieve the original item

int start()
  {
   int hInternetSession = InternetOpenA("ftp my", 0, "", "", 0);
   if(hInternetSession <= 0) {  Alert("Ошибка при вызове InternetOpenA()");  return(0);}
   
   
   int hI = InternetConnectA(hInternetSession, "10.1.0.11", 21, "zebra","rf,fy4br",1,0,0 );
   if(hI <= 0) { Alert("Ошибка при вызове InternetConnectA()"); return(0);}                    

   bool hFTP = FtpGetFileA( hInternetSession, "1.txt", "d:\1.txt", false, 0,1,0);
   if(hFTP ==false) { Alert("Ошибка при вызове FtpGetFileA()");  return(0); }
         
   InternetCloseHandle(hI);
   InternetCloseHandle(hInternetSession);
   
   return(0);
}
//+------------------------------------------------------------------+
 
Я как-то для этих целей пользовался DLL-библиотекой(автор не я).
Файлы:
mtftp.zip  5 kb
 
al.k >>:
Я как-то для этих целей пользовался DLL-библиотекой(автор не я).

Спасибо.(и Вам и Автору) Да, это решает мою текущую задачу/проблему.


Но желание разобраться в коде осталось .

 

попробуйте 

 bool hFTP = FtpGetFileA( hI, "1.txt", "d:\1.txt", false, 0,1,0);

и ешё перед ретурнами не забывайте закрывать хендлы. а то ругатся потом будет

 
sergeev >>:

попробуйте

bool hFTP = FtpGetFileA( hI, "1.txt", "d:\1.txt", false, 0,1,0);

Да !! :) сам тока хотел написать, что разобрался.

Спасибо. Спасибо что откликнулись.

 
sergeev >>:

и ешё перед ретурнами не забывайте закрывать хендлы. а то ругатся потом будет

А что Вы имеете ввиду (я просто только второй день с АПИ сижу - ничего еще не знаю про грабли).

Разве не достаточно хендлы закрываются в порядке, противоположном их открытию?

   InternetCloseHandle(hI);
   InternetCloseHandle(hInternetSession);
 

http://msdn.microsoft.com/en-us/library/aa384363(VS.85).aspx

http://msdn.microsoft.com/en-us/library/aa384157(VS.85).aspx

Тут все написано. В функции FtpGetFile первый параметр не hInternetSession, а hI   

 
Да, был не внимателен :). Спасибо Всем кто откликнулся - тему можно закрыть.
 
kaats >>:

А что Вы имеете ввиду (я просто только второй день с АПИ сижу - ничего еще не знаю про грабли).

Разве не достаточно хендлы закрываются в порядке, противоположном их открытию?


Если случилась ошибка ты выходишь из функции, так вот перед этим и нужно удалять то что ты создал до этого.
 

Тоже решил сделать отправку на фтп.

Но почему то размер файлов всегда = 0.

Те скачиваются пустые файлы...

В чем может быть проблема?

 
serler2:

Тоже решил сделать отправку на фтп.

Но почему то размер файлов всегда = 0.

Те скачиваются пустые файлы...

В чем может быть проблема?

если отправляете по ФТП, то воспользуйтесь функциями самого терминала SendFTP
Причина обращения: