Автор | Сообщение |
|
| |
Пост N: 991
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.10.08 21:46. Заголовок: Как проверить существование файла на FTP ?
Вот и весь вопрос.
|
|
|
Новых ответов нет
, стр:
1
2
3
All
[см. все]
|
|
|
| |
Пост N: 993
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.10.08 07:50. Заголовок: Собственно разобралс..
Собственно разобрался;) Одно но , если я точно не знаю какова длина имен файлов на ftp , то вместе с именем (после имени) лезет куча хлама.......то ли у меня руки кривые то ли what32 такой. ps Юзал what32
|
|
|
|
| |
Пост N: 997
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.10.08 16:30. Заголовок: Юзаю для доступа на ..
Юзаю для доступа на Ftp , библиотечку What32 , впрочем уже писал про это ;) Такие функции как FtpGetFile FtpSetCurrentDirectory InternetOpen InternetConnect FtpPutFile FtpDeleteFile работают достаточно быстро и нареканий нет. А вот такая нужная вещь как FtpDirectory в которой отрабатывают функции FtpFindFirstFile и InternetFindNextFile то работают быстро то тормозят на равном месте. Как это дело ускорить или возможно у кого есть нормальная библиотека (иль сырцы) для доступа к FTP на Xharbour ? Спасибо !
|
|
|
|
| постоянный участник
|
Пост N: 539
Зарегистрирован: 09.10.06
|
|
Отправлено: 16.10.08 16:50. Заголовок: Мне тоже одна задачк..
Мне тоже одна задачка нарисовалась для работы с FTP. Думаю использовать contrib\hbcurl. Вот, что это "чудо" позволяет tool for transferring files with URL syntax, supporting FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS and FILE. curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, kerberos...), file transfer resume, proxy tunneling and a busload of other useful tricks. Если не все, то очень много.
|
|
|
|
| |
Пост N: 1007
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.10.08 17:13. Заголовок: Петр Спасибо ! Сам ..
Петр Спасибо ! Сам пробовал ?
|
|
|
|
| постоянный участник
|
Пост N: 541
Зарегистрирован: 09.10.06
|
|
Отправлено: 16.10.08 17:51. Заголовок: Тестирую, вроде рабо..
Тестирую, вроде работает хорошо К тому же я обнаружил, что если скачать libcurl.dll с поддержкой SSL, то путем нехитрых манипуляций можно получить как бонус crypto возможности - aes, blowfish, idea. Иногда бывает полезно.
|
|
|
|
| |
Пост N: 1008
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.10.08 19:26. Заголовок: Петр Если не сложно..
Петр Если не сложно , бо я не совсем въехал , покажи с нуля как получить список файлов текущей директории на Ftp с помощью hbcurl. Спасибо !
|
|
|
|
| постоянный участник
|
Пост N: 542
Зарегистрирован: 09.10.06
|
|
Отправлено: 16.10.08 19:47. Заголовок: Чуть не написал, см...
Чуть не написал, см. contrib\curl\test Но потом вспомнил, что ты же xHarbour юзаешь. Посмотрел xHarbour - там порт очень обрезанный и пример такой же куцый.. Даже не понятно, как юзеры библиотеку собирать будут. Пример (может и не заработать). #include "hbcurl.ch" #include "common.ch" #include "fileio.ch" FUNCTION Main( cDL ) LOCAL curl LOCAL info LOCAL tmp LOCAL tmp1 LOCAL f LOCAL lVerbose := .F. ? curl_version() ? "INIT:", curl_global_init() IF ! Empty( curl := curl_easy_init() ) DEFAULT cDL TO "ftp://ftp.cisco.com/" /* Now let's download a dirlist to memory */ ? curl_easy_setopt( curl, HB_CURLOPT_DOWNLOAD ) ? curl_easy_setopt( curl, HB_CURLOPT_DIRLISTONLY ) ? curl_easy_setopt( curl, HB_CURLOPT_URL, cDL ) ? curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYPEER, .F. ) ? curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYHOST, .F. ) ? curl_easy_setopt( curl, HB_CURLOPT_DL_BUFF_SETUP ) ? curl_easy_setopt( curl, HB_CURLOPT_PROGRESSBLOCK, {| nPos, nLen | a := CurGet(), DispOutAt( 11, 10, Str( ( nPos / nLen ) * 100, 6, 2 ) + "%" ), CurSet( a ) } ) ? curl_easy_setopt( curl, HB_CURLOPT_NOPROGRESS, .F. ) ? curl_easy_setopt( curl, HB_CURLOPT_VERBOSE, lVerbose ) ? "DOWNLOAD DIRLIST TO STRING:", curl_easy_perform( curl ) ? "RESULT 1: " + curl_easy_dl_buff_get( curl ) ? curl_easy_setopt( curl, HB_CURLOPT_DL_BUFF_GET, @tmp ) ? "RESULT 2: " + tmp /* Cleanup session */ curl_easy_cleanup( curl ) ENDIF curl_global_cleanup() RETURN NIL STATIC FUNCTION CurGet() RETURN { Row(), Col() } STATIC PROCEDURE CurSet( a ) SetPos( a[ 1 ], a[ 2 ] ) RETURN P.S. HbCurl был изначально портирован в xHarbour и лишь потом в Harbour. Но был существенно переработан. Я думаю не составит труда портировать его обратно. Бегло просмотрев исходник заметил, что hb_storclen_buffer нужно заменить на hb_storclenAdopt, а так вроде бы все должно быть нормально.
|
|
|
|
| постоянный участник
|
Пост N: 543
Зарегистрирован: 09.10.06
|
|
Отправлено: 16.10.08 21:07. Заголовок: Все оказалось очень ..
Все оказалось очень просто Нужно скачать исходники Harbour Если не хочется качать все и есть под рукой такая программа, как Download Master, то сначала выбираем функцию просмотра zip архива, выбираем нужные файлы: hbcurl.c hbcurl.ch и пример ftp_uldl.prg и затем скачиваем. Бросаем это в xHarbour\contrib\hbcurl (предварительно удалив все оттуда). В hbcurl.c где-то после #include "hbcurl.ch" добавляем #if defined( __XHARBOUR__ ) # define HB_FHANDLE FHANDLE # define hb_retc_null() hb_retc( (char*) NULL ) # define hb_storclen_buffer hb_storclenAdopt #endif Компилируем библиотеку с помощью make_b32.bat @echo off set CURL_DIR=e:\extlib\curl if not exist %CURL_DIR%\bin\libcurl.dll goto NODLL if not exist .\lib md .\lib if not exist .\obj md .\obj if "%1" == "clean" goto CLEAN if "%1" == "CLEAN" goto CLEAN make -fmakefile.bc %1 %2 %3 >make_b32.log if errorlevel 1 goto error goto copy_files :error echo there is an error on make files notepad make_b32.log goto end :clean if exist lib\*.bak del .\lib\*.bak if exist lib\*.def del .\lib\*.def if exist lib\*.lib del .\lib\*.lib if exist obj\*.obj del .\obj\*.obj if exist *.log del *.log goto End :copy_files impdef -a lib\libcurl.def %CURL_DIR%\bin\libcurl.dll implib -a lib\libcurl.lib lib\libcurl.def copy lib\*.lib ..\..\lib copy *.ch ..\..\include goto end :NODLL echo. echo.Missing libcurl.dll, please download it echo.Make aborted. echo. :end if exist *.tds del *.tds if exist *.map del *.map makefile.bc # makefile for Borland C/C++ 32 bits # Building of hbcurl.lib INCLUDE_DIR = ..\..\include;$(CURL_DIR)\include OBJ_DIR = obj LIB_DIR = lib $(LIB_DIR)\hbcurl.lib : \ $(OBJ_DIR)\hbcurl.obj $(OBJ_DIR)\hbcurl.obj : hbcurl.c .c.obj: bcc32 $(CLIBFLAGS) -c -O2 -I$(INCLUDE_DIR) -o$@ $< tlib $(LIB_DIR)\hbcurl.lib -+$@,,
|
|
|
|
| |
Пост N: 1009
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.10.08 11:06. Заголовок: Петр пишет: Бросаем..
Петр пишет: цитата: | Бросаем это в xHarbour\contrib\hbcurl (предварительно удалив все оттуда). В hbcurl.c где-то после #include "hbcurl.ch" добавляем #if defined( __XHARBOUR__ ) # define HB_FHANDLE FHANDLE # define hb_retc_null() hb_retc( (char*) NULL ) # define hb_storclen_buffer hb_storclenAdopt #endif |
| Все сделал , во время сборки получаем MAKE Version 5.2 Copyright (c) 1987, 2000 Borland Error makefile.bc 11: Command syntax error Error makefile.bc 13: Command syntax error Error makefile.bc 15: Command syntax error Error makefile.bc 16: Command syntax error Error makefile.bc 16: Command syntax error *** 5 errors during make ***
|
|
|
|
| |
Пост N: 1010
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.10.08 11:38. Заголовок: С этим разобрался. Т..
С этим разобрался. Теперича получаем Error E2209 hbcurl.c 55: Unable to open include file 'curl/curl.h' Error E2209 hbcurl.c 56: Unable to open include file 'curl/types.h' Error E2209 hbcurl.c 57: Unable to open include file 'curl/easy.h' Error E2209 hbcurl.c 58: Unable to open include file 'curl/multi.h' Где их брать эти .H ?
|
|
|
|
| постоянный участник
|
Пост N: 544
Зарегистрирован: 09.10.06
|
|
Отправлено: 17.10.08 12:15. Заголовок: Ты curl скачал и уст..
Ты curl скачал и установил set CURL_DIR=e:\extlib\curl
|
|
|
|
|
| |
Пост N: 1011
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.10.08 12:34. Заголовок: Петр пишет: Ты curl..
Петр пишет: цитата: | Ты curl скачал и установил |
| я скачал сырцы harbour , где качать curl ? :)
|
|
|
|
| постоянный участник
|
Пост N: 545
Зарегистрирован: 09.10.06
|
|
Отправлено: 17.10.08 12:42. Заголовок: Здесь..
|
|
|
|
| |
Пост N: 1012
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.10.08 13:12. Заголовок: Петр Спасибо , прав..
Петр Спасибо , правда я и сам уже нашел. Все собралось ! ;) PS Век живи , век учись ;)
|
|
|
|
| |
Пост N: 1013
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.10.08 13:33. Заголовок: Твой примерчик собра..
Твой примерчик собрался ;) Однако получение списка файлов так же медленновато работает.......
|
|
|
|
| постоянный участник
|
Пост N: 546
Зарегистрирован: 09.10.06
|
|
Отправлено: 17.10.08 13:57. Заголовок: Dima пишет: Однако ..
Dima пишет: цитата: | Однако получение списка файлов так же медленновато работает....... |
| Многое зависит от сервера..
|
|
|
|
| |
Пост N: 1014
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.10.08 14:09. Заголовок: Петр пишет: Многое ..
Петр пишет: цитата: | Многое зависит от сервера.. |
| Таки да ;) Проверил на своем FTP , получил список моментально. А как проверить наличие файла по маске , ну скажем Z_*.zip. Разумеется что я могу проанализировать полученный DIR , но все же интерестно , есть ли такое... PS И все же минус есть у curl , вместе с приложением нужно не забывать давать 5 dll файлов
|
|
|
|
| постоянный участник
|
Пост N: 547
Зарегистрирован: 09.10.06
|
|
Отправлено: 17.10.08 14:31. Заголовок: Наверное есть такая ..
Наверное есть такая возможность, я еще просто не докопался Это очень маленький минус. Во первых можно пользоваться инсталяторами и оно будет автоматически все упаковываться. Во-вторых если не нужно к примеру SSL или ZIP, можно скачав сырцы перекомпилировать libcurl под свои нужды и использовать одну лишь libcurl.dll (около 400 kb). Но вдруг завтра тебе захочется узнать не только есть ли такой zip архив на сервере, но и узнать его содержимое и скачать определенный файл из архива - вот тут тебе zlib1.dll пригодится и т.д. В-третьих ты можешь попробовать скомпилировать приложение с статической библиотекой libcurl.lib (нужны исходники). Я статическую линковку не пробовал, но библиотеку перекомпилировал с помощью MinGW, Borland 5.8.2 и MSVC 8.0 без всяких проблем.
|
|
|
|
| постоянный участник
|
Пост N: 548
Зарегистрирован: 09.10.06
|
|
Отправлено: 17.10.08 14:36. Заголовок: Ну и совсем забыл, е..
Ну и совсем забыл, если завтра тебе будет нужно перенести приложение на Linux или HPUX - тебе не придется ничего менять, абсолютно.
|
|
|
|
| |
Пост N: 1015
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.10.08 14:47. Заголовок: Петр Убедил !!! :s..
Петр Убедил !!! Придется привыкать к DLL .
|
|
|
Новых ответов нет
, стр:
1
2
3
All
[см. все]
|
|