Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2011.11.20;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.004 c
15-1311280188
Юрий
2011-07-22 00:29
2011.11.20
С днем рождения ! 22 июля 2011 пятница


2-1312179170
CRLF
2011-08-01 10:12
2011.11.20
"Длинный" путь


2-1311843120
Александр160591
2011-07-28 12:52
2011.11.20
запарка с компонентами и их свойствами


15-1311915862
И. Павел
2011-07-29 09:04
2011.11.20
Восстановление бекапа БД в другую БД


3-1266323284
Mike Kouzmine
2010-02-16 15:28
2011.11.20
Беда с двойной точностью





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский