Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.11.20;
Скачать: CL | DM;

Вниз

Вопрос по FtpGetFile   Найти похожие ветки 

 
SortoVaritu ©   (2009-06-19 10:17) [0]

Вопрос в следующем. На FTP лежит несколько файлов. Эти несколько файлов являются разрезанным архивом rar. При использовании FTPGetFile файлы скачиваются на мой компьютер. НО при попытке их собрать в архив имеем ошибку контрольной суммы. Файлы по 100 МБ. Для доступа к FTP используется прокси. В чем может быть проблема?


 
Сергей М. ©   (2009-06-19 11:49) [1]


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


1. На ftp-сервере лежит криво порезаный архив.
2. Загружены не все файлы из оригинальной нарезки
2. Кривое использование FtpGetFile


 
SortoVaritu ©   (2009-06-19 11:52) [2]

1. На ftp-сервере лежит нормально нарезанный файл. (Проверено TC)
2. Файлы тоже все. Сам резал.
3. Вот это как раз и интересует. Будет ли разница если скачивать файл как ASCII или бинарный?


 
Сергей М. ©   (2009-06-19 11:57) [3]


> Будет ли разница если скачивать файл как ASCII или бинарный?


Конечно будет


 
clickmaker ©   (2009-06-19 12:03) [4]

в ASCII mode "Control and formatting information is converted to local equivalents."
т.е. учитываются переводы строки, например. А они разные в *nix, mac и windows системах


 
SortoVaritu ©   (2009-06-19 12:05) [5]

Тогда вопрос следующий. Файл собирается, ругается на ошибку crc. После в собранный файл (rar архив) можно зайти и увидеть файл который заархивирован. Насколько я понимаю, если я принимаю файл в ASCII то у меня вообще архив бы не открывался и вообще TC его бы не воспринял как архив.


 
SortoVaritu ©   (2009-06-19 12:07) [6]

Кстати еще могу сказать, что при скачивании маленького файла ~10 МБ все в норме. Такая проблема наблюдается только при скачке большого файла.


 
Сергей М. ©   (2009-06-19 12:13) [7]


> SortoVaritu ©   (19.06.09 12:05) [5]


Неправильно понимаешь.

Заголовок архива в рез-те трансфера заведомо бинарного файла как текстового оказался не испорчен (просто повезло), потому принятый файл и распознается как архив.


> могу сказать, что при скачивании маленького файла ~10 МБ
> все в норме


Опять же см. [1] п.3


 
SortoVaritu ©   (2009-06-19 12:20) [8]

Вот использование FtpGetFile

function FtpGetFile(
   hFTP;
   RemName;
   LocName;
   true;
   0;
   FTP_TRANSFER_TYPE_BINARY;
   0);


 
SortoVaritu ©   (2009-06-19 12:24) [9]

Вот хэндлы

hNet := InternetOpen("Program_Name",
                       INTERNET_OPEN_TYPE_PRECONFIG,
                       nil,
                       nil,
                       0);

hFTP := InternetConnect(hNet,
                         MyServer,
                         21,
                         Username,
                         Password,
                         INTERNET_SERVICE_FTP,
                         0,
                         0);


 
Сергей М. ©   (2009-06-19 12:37) [10]

А где анализ результата вызова ?


 
SortoVaritu ©   (2009-06-19 12:40) [11]

анализ есть. Это я просто из тела программы вырвал саму FtpGetFile и хэндлы. Грубо говоря если сделано так, что если на FTP в определенный католог не законнектится, то FtpGetFile просто не вызывается.


 
Сергей М. ©   (2009-06-19 12:48) [12]

А если вызывается, то где анализ возвращенного ею рез-та ?


 
SortoVaritu ©   (2009-06-19 13:02) [13]

Вот тут и вопрос.
function FtpGetFile(
  hFTP;
  RemName;
  LocName;
  true;
  0;
  FTP_TRANSFER_TYPE_BINARY;
  0)=FALSE. Всегда. То есть файл скачивается, но FtpGetFile возвращает False все равно.


 
Сергей М. ©   (2009-06-19 13:07) [14]

Return Value

Returns TRUE if successful, or FALSE otherwise. To get a specific error message, call GetLastError.


 
SortoVaritu ©   (2009-06-19 13:13) [15]

Хорошо попробую использовать GetLastError. Но если чисто теоретически, то в чем может быть загвоздка? (ПОнимаю что нужно смотреть GetLastError). Просто на форумах куча примеров и у всех вроде как работает FtpGetFile нормально. И размер файла на сервере и скачанного тоже вроде как идентичны.


 
Сергей М. ©   (2009-06-19 13:16) [16]

Загвозку есть резон искать лишь после анализа кода отказа.


 
SortoVaritu ©   (2009-06-19 13:18) [17]

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


 
Сергей М. ©   (2009-06-19 13:21) [18]

Ну чего ты гадаешь-то ?)

Давно уж написал бы

Win32Check(FtpGetFile(..));

тогда бы и разговор был предметный о причинах ..


 
SortoVaritu ©   (2009-06-19 13:27) [19]

Заранее извиняюсь. Сейчас не имею доступа к FTP.


 
Сергей М. ©   (2009-06-19 13:29) [20]

Ну вот как поимеешь, так сразу и милости просим)


 
SortoVaritu ©   (2009-06-20 00:24) [21]

Так. Ошибка 12111. Что как я понял означает прерывание сессии с FTP.


 
Сергей М. ©   (2009-06-22 08:58) [22]

Точно так - FTP-сессия была прервана.
Ни о каких контр.суммах при этом, естественно, не может идти и речи.


 
SortoVaritu ©   (2009-06-22 09:57) [23]

Хорошо. А как с этим бороться?


 
brother ©   (2009-06-22 10:12) [24]

выесняй почему сессия рвется


 
SortoVaritu ©   (2009-06-22 10:19) [25]

Хм. Трудный вопрос. При скачивании тотал коммандером все ОК. Коммандер использует для этого комманды для FTP. А сессия рвется всегда в самом конце закачки. То есть я так понимаю, что файл скачивается, в последний момент моя софтина отсылает какой-то запрос на сервер и тут выясняется, что сессия уже разорвана.


 
brother ©   (2009-06-22 10:28) [26]

> А сессия рвется всегда в самом конце закачки

не факт


 
Сергей М. ©   (2009-06-22 10:31) [27]

Для начала убедись, что сессию рвет не файрвол и не прокси.


 
brother ©   (2009-06-22 10:32) [28]

> сессию рвет не файрвол и не прокси

они не могут этого сделать, тк соединение установлено


 
SortoVaritu ©   (2009-06-22 10:35) [29]

Вот в том то и дело. Вообщем-то нигде данная ситуация и не описана. Да и в случае с коммандером ведь прокси сессию не рвет, а файервол у меня отрублен.


 
brother ©   (2009-06-22 10:39) [30]

снифь порт и смотри, в чем различия (твоя прога и командер тотал)))))


 
SortoVaritu ©   (2009-06-22 10:49) [31]

Есть еще вопрос. Если вместо FTPGetFile использовать FTPCommand. Вернее я это уже пробую. Но есть загвоздка.
При выполнении FtpCommand(hFtp,true,FTP_TRANSFER_TYPE_BINARY,
   PChar("RETR "+MyFile),0,hFile) у меня выходит ошибка переполнения памяти. А вот комманда FtpCommand(hFtp,true,FTP_TRANSFER_TYPE_ASCII,
   PChar("LIST"),0,hFile) выполняется без проблем.


 
Сергей М. ©   (2009-06-22 10:52) [32]


> они не могут этого сделать


Еще как могут


 
brother ©   (2009-06-22 10:59) [33]

> Еще как могут

на каком основании позволь полюбопытствовать?


 
SortoVaritu ©   (2009-06-22 10:59) [34]

Кстати данная проблема не только с моей прогой, но и с некоторыми FTP клиентами.


 
Сергей М. ©   (2009-06-22 11:03) [35]

http://www.cryer.co.uk/brian/delphi/wininet/example_ftpcommand.htm


 
SortoVaritu ©   (2009-06-22 11:08) [36]

Так я по этой ссылке и читал использование FTPCommand. Там получается, что при успешном выполнении данной комманды должна сгенерироваться переменная hFIle. Так она я так понял и генерируется, только почему то ошибку с памятью выбрасывает.


 
Сергей М. ©   (2009-06-22 11:11) [37]

Что, вот прямо так и говорит "я, ошибка переполнения памяти, выхожу" или "меня, ошибку, выбросили вместе с памятью" ?

Ты не в состоянии привести дословный текст увиденного тобой, да ?


 
SortoVaritu ©   (2009-06-22 11:15) [38]

access violetion at address "адрес не помню". write to address FFFFFFFFF


 
brother ©   (2009-06-22 11:22) [39]

> только почему то ошибку с памятью выбрасывает.


> access violetion at address

мдя(


 
SortoVaritu ©   (2009-06-22 11:24) [40]

И что сие может озночать



Страницы: 1 2 3 вся ветка

Текущий архив: 2011.11.20;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.011 c
15-1311598347
fzt
2011-07-25 16:52
2011.11.20
Как писать плагин к Delphi? для чайников


9-1190291664
sloosar1
2007-09-20 16:34
2011.11.20
Рисование на панели


15-1311453004
Юрий
2011-07-24 00:30
2011.11.20
С днем рождения ! 24 июля 2011 воскресенье


15-1311199461
Делфиец
2011-07-21 02:04
2011.11.20
А есть ли в Питере?


15-1311261832
Студент
2011-07-21 19:23
2011.11.20
Что учить?