Форум » [x]Harbour » Isdirectory » Ответить

Isdirectory

Dima: ? isdirectory("\\127.0.0.1\Lanres\") .F. ? hb_direxists("\\127.0.0.1\Lanres\") .T. Похоже isdirectory снова перестала работать с UNC путями ЗЫ Harbour 3.2

Ответов - 14

PSP: Вот что-то про это: [pre2]2010-06-15 13:38 UTC+0200 Viktor Szakats (harbour syenar.net) * contrib/xhb/xhbfs.c ! Fixed ISDIRECTORY() to work like originally intended. This effectively reverts breakage caused by this change: 2009-07-06 10:06 UTC+0100 Miguel Angel Marchuet <miguelangel@marchuet.net> * source/rtl/file.c * Changed IsDirectory to fix IsDirectory( "\\machine\c" ) style call under windows platforms. BTW, in Harbour to achieve above effect, you can use native HB_DIREXISTS( "\\machine\c" ) function call. [/pre2]

Dima: Dima пишет: ? hb_direxists("\\127.0.0.1\Lanres\") что то долго срабатывает первый раз если такого пути нет. чем можно заменить hb_direxists ?

Andrey: Я тоже с этим мучился.... Сделал так: nI := DIRCHANGE(cPath) IF nI == 0 ELSEIF nI == -2 cMsg := "Ошибка ! ("+LTRIM(STR(nI))+") ; Файл не найден ! ;"+; "Путь к серверу = "+cPathServer+" ? ;" cMsg := HB_OEMTOANSI(cMsg) wvw_messagebox(0, cMsg, cTitle, MB_OK+MB_ICONHAND) QUIT ELSEIF nI == -3 cMsg := "Ошибка ! ("+LTRIM(STR(nI))+") ; Путь доступа не найден ! ;"+; "Путь к серверу = "+cPathServer+" ? ;" cMsg := ATREPL(";",cMsg,CHR(13)+CHR(10)) cMsg := HB_OEMTOANSI(cMsg) wvw_messagebox(0, cMsg, cTitle, MB_OK+MB_ICONHAND) QUIT ELSEIF nI == -5 cMsg := "Ошибка ! ("+LTRIM(STR(nI))+") ; Отказ доступа в сети ! ;"+; "Путь к серверу = "+cPathServer+" ? ;" cMsg := ATREPL(";",cMsg,CHR(13)+CHR(10)) cMsg := HB_OEMTOANSI(cMsg) wvw_messagebox(0, cMsg, cTitle, MB_OK+MB_ICONHAND) QUIT ELSE cMsg := "Неизвестная ошибка ! ("+LTRIM(STR(nI))+")"+CRLF+; "Путь к серверу = "+cPathServer+" ? "+CRLF cMsg := ATREPL(";",cMsg,CHR(13)+CHR(10)) cMsg := HB_OEMTOANSI(cMsg) wvw_messagebox(0, cMsg, cTitle, MB_OK+MB_ICONHAND) QUIT ENDIF


Dima: Andrey пишет: nI := DIRCHANGE(cPath) Эта функция ни чуть не быстрее HB_DIREXISTS , вот если б можно было в нее передать нужный таймаут скажем в 1 сек. Да пичалька с этим тормозком....

Dima: Dima пишет: Да пичалька с этим тормозком.... Проблему решил. Дело в том что сетевой ресурс который проверяю является так же домашней папкой на работающем там же FTP сервере. Поэтому HB_DIREXISTS заменил на проверку доступности FTP сервера по LAN адресу с задержкой 300 , работает моментально. PS Пытался сделать свой Hb_PING для сетки с помощью hb_inetConnectIP , но вероятно я не до конца понимаю как она работает. При указании не существующего IP адреса хэндл все равно создается , да и hb_inetErrorCode говорит что все путем.

PSP: Дима, надо, видимо, проверить новый сокет вот этим: http://www.fivetechsoft.com/harbour-docs/harbour-reference-guide.htm#hb_inetErrorCode

Dima: Сделал вот такой тест. [pre2] Proc main local hSocket if hb_inetInit() hSocket := hb_inetCreate(100) ? hb_inetConnectIP( "127.0.0.1",21,hSocket ) ? hb_inetErrorCode( hSocket ) // -1 hb_inetCleanup() endif return [/pre2] Меня терзают смутные сомнения насчет номера порта , какой порт надо указать если проверку делаю в локальной сети ?

Dima: А вот так работает hSocket := hb_inetCreate(1000) // таймаут надо увеличить ? hb_inetConnectIP( "127.0.0.1",13,hSocket ) // с 13 портом пашет однако и с 7 [pre2] 13/TCP,UDP DAYTIME — предназначен для тестирования связи путём получения от сервера текущих даты и времени в текстовом виде 7/TCP,UDP ECHO — предназначен для тестирования связи путём отправки данных на сервер и получения от него их же в неизменном виде [/pre2]

Andrey: Dima пишет: А вот так работает hSocket := hb_inetCreate(1000) // таймаут надо увеличить ? hb_inetConnectIP( "127.0.0.1",13,hSocket ) // с 13 портом пашет однако и с 7 А как тогда проверить работоспособность сервера в сети - допустим по имени SERVERWIN2000 ?

PSP: Dima пишет: какой порт надо указать если проверку делаю в локальной сети Не важно, локальная сеть или глобальная. Номер порта определятся сервисом (программой) на удаленном сервере, к которому хочешь подключиться.

Dima: Andrey пишет: А как тогда проверить работоспособность сервера в сети - допустим по имени SERVERWIN2000 ? По имени hb_inetConnect()

Dima: PSP пишет: Не важно, локальная сеть или глобальная. Номер порта определятся сервисом (программой) на удаленном сервере, к которому хочешь подключиться. Ну как бы на сервере нет Harbour сервера(проги) , по любому порту не проверишь (уже игрался) , только по определенным о которых писал выше ну или по 21 если там поднят FTP сервер (на 21 порту).

PSP: Dima пишет: Ну как бы на сервере нет Harbour сервера(проги) , по любому порту не проверишь (уже игрался) , только по определенным о которых писал выше ну или по 21 если там поднят FTP сервер (на 21 порту). 7-ой порт (TCP/UDP) как раз для echo. Его и используй.

Dima: Что касается проверки наличия директории , то в начале (что бы не было тормозов) проверяем PING c помощью hb_inetConnect (hb_inetConnectIP) (я ставил таймаут 2000) и если результат положительный , только после этого делаем проверку с помощью hb_direxists.



полная версия страницы