Search  
Thursday, May 24, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  COM, DCOM si OLE Automation  Mai multi param...
 Mai multi parametri pentru FtpGetFile( ) ?
 
 10/9/2006 6:17:59 PM
User is offlineHorHe
116 posts
5th


Mai multi parametri pentru FtpGetFile( ) ?
 (Romania)

   Am tot umblat pe forum si am tot cautat ceva sa ma ajute sa invat cum sa fac o conexiune FTP. Ok am gasit dar ceva f simplu, fara prea multe explicatii... dar am reusit. Insa vreau sa mai stiu cum pot sa fac sa nu-mi moara naibii tot programul? Eu am si unele fisiere cam de 3-4Mb, si in timp ce downloadez folosesc absolut toate resursele fox-ului, si daca din intamplare mai dau si un clik ceva deja windows-ul vede aplicatia ca (Not responding). Asta este singura problema, pt ca in final, in functie de cat permite conexiunea mea sa downloadez sau de cat ma limiteaza serverul, reusesc sa primesc fisierul respectiv. Am facut si un mic test : am pus un timer care sa imi afiseze un set de mesaje neconditionate de mine si in timp ce vedeam mesajele astea la interval de 0.1sec am inceput download-ul si seria mea de mesaje sa oprit la cel curent, in 3-4 secunde mia disparut si cursorul mouse-ului si am ramas asa 2-3 minute cat am luat acel fisier.

   Vreau sa stiu cum pot si daca pot sa rezolv problema, si daca depinde sau nu de FtpGetFile( ).

 

 10/9/2006 6:51:35 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Mai multi parametri pentru FtpGetFile( ) ?
 (N/A)
Din pacate, raspunsul este "nu". VFP executa sincron toate comenzile (altfel spus, controlul este returnat dupa terminarea comenzii). Clientii aia de ftp care iti dau voie sa faci si altceva in timp ce descarci sunt multi-thread. Thread-ul principal se ocupa de aplicatie, iar "download" deschide un nou thread, care face downloadul. Pentru ca VFP nu este multi-thread, ales-bules - nu merge. Ce-ai putea face, in schimb, este sa descarci fisierul in bucati (de 512 octeti sau 1k), iar intre portii sa mai bagi un DoEvents, care sa execute ce-a facut userul intre timp. Oricum, o flexibilitate ca cea din multithread n-ai cum sa obtii.
Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 10/9/2006 9:06:10 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Mai multi parametri pentru FtpGetFile( ) ?
 (N/A)
Sau poate incerci sa vezi ce e cu asta?
http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=VFPy

Se bazeaza pe codul lui Calvin Hsia de la MSFT si se pare ca permite multithreading.
 
 10/10/2006 12:29:57 PM
User is offlineTibisan
269 posts
4th


Re: Mai multi parametri pentru FtpGetFile( ) ?
 (Romania)

daca folosesti controlul Inet, ala este sincron (ingheatza tot pana termina). cauta un control active-x free ptr download prin ftp care sa fie asincron, si eventual multi-threaded (e greu de gasit). parerea mea este ca active-x-ul este de vina ptr freeze, nu foxul. exemple de VisualBasic6 gasesti mai jos, care cu niste efort, se poate porta in vfp cred...

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=42460&lngWId=1

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=21186&lngWId=1 

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=32106&lngWId=1

 

 10/10/2006 3:47:02 PM
User is offlineHorHe
116 posts
5th


Re: Mai multi parametri pentru FtpGetFile( ) ?
 (Romania)

Cred ca nu am mentionat ca lucrez in VFP6.0 dar nu cred ca are vro importanta...

Se poate sa nu fie fox-ul de vina dar nici nu pot sa ma apuc sa instalez pe sute de calculatoare active-x-uri sau alte chestii pt ca iar deranja pe oameni. Oricum sar rezolva, sa fie numai din fox. Am luat MTmyVFP2.5 si vreau sa sa vad daca iese ceva. Daca reusesc ceva si pt vfp6 (acolo are doar pt 7, 8 si 9) osa rezin cu un atasament !

Multumesc pt raspunsuri la toata lumea !!!

 10/10/2006 6:13:32 PM
User is offlineHorHe
116 posts
5th


Re: Mai multi parametri pentru FtpGetFile( ) ?
 (Romania)

   Intradevar folosesc Inet, dar am gasit un active-x care ar putea sa ma ajute, dar nu shtiu cum. Cum as putea sa aflu ce proceduri contin dll-urile respective, sau cum sa aplic parametrii ? Sunt cam incepator in astea :D

      Am folosit asta (pt vfp6): http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=VFPy&ReleaseId=98

  Am gasit un setup.exe pe care normal l-am instalat, dar care nu a schimbat nimic in download-ul meu, am impresia ca mai trebuie sa fac ceva, dar nu imi dau seama ce !

 10/11/2006 8:52:53 AM
User is offlineTibisan
269 posts
4th


Re: Mai multi parametri pentru FtpGetFile( ) ?
 (Romania) Modified By Tibisan  on 10/11/2006 10:56:24 AM)

Pai acel pachet poti sa-l folosesti ca sa creezi un dll multithreaded in care bagi respectivul Inet si creezi thread-uri de download, fiecare thread cu cate un Inet in el, care merg paralel cu foxul. Nu pot sa iti spun mai mult de atat, ca nu stiu. Oricum, asta e _o_ abordare. O alta ar fi cu portarea instructiunilor API din exemplele mele de mai sus, caz in care iti trebuie vfp_callback si restruct.prg de pe UniversalThread. Dar sunt complicate amandoua, comparativ cu ce am gasit , direct ptr VFP aici: http://www.fpress.com/revista/Num9707/jul97.htm ,care chiar daca e in spaniola, tot te bungheshti ce inseamna partea asta:

**********************************************************

*** Definición de constantes
#DEFINE INTERNET_OPEN_TYPE_PRECONFIG     0
#define INTERNET_OPEN_TYPE_DIRECT        1
#define INTERNET_OPEN_TYPE_PROXY         3
#DEFINE INTERNET_DEFAULT_FTP_PORT       21
#DEFINE INTERNET_SERVICE_FTP             1
#DEFINE INTERNET_FLAG_PASSIVE     14217728
*** Declaración de funciones del API
DECLARE LONG InternetOpen ;
IN "wininet.dll" ;
STRING   lpszAgent, ;
LONG     dwAccessType, ;
STRING   lpszProxyName, ;
STRING   lpszProxyBypass, ;
LONG     dwFlags
DECLARE LONG InternetConnect ;
IN "wininet.dll" ;
LONG     hInternetSession, ;
STRING   lpszServerName, ;
LONG     nServerPort, ;
STRING   lpszUsername, ;
STRING   lpszPassword, ;
LONG     dwService, ;
LONG     dwFlags, ;
LONG     dwContext
DECLARE INTEGER InternetCloseHandle ;
IN "wininet.dll" ;
LONG     hInet
DECLARE LONG GetLastError ;
IN WIN32API
*** Apertura del API
nInternet = InternetOpen( ;
"pruebavfp", ;
INTERNET_OPEN_TYPE_DIRECT, ;
"", "", 0 )
IF nInternet = 0
MessageBox( "Error: " ;
+ LTRIM( STR( GetLastError() ) ) ;
+ " en InternetOpen.", 16 )
InternetCloseHandle( nFtp )
RETURN
ENDIF
*** Conexión con el servicio FTP
nFtp = InternetConnect( ;
nInternet, ;
"ftp.microsoft.com", ;
INTERNET_DEFAULT_FTP_PORT, ;
"", "", ;
INTERNET_SERVICE_FTP, ;
INTERNET_FLAG_PASSIVE, ;
0 )
IF nFtp = 0
MessageBox( "Error: " ;
+ LTRIM( STR( GetLastError() ) ) ;
+ " en InternetConnect.", 16 )
RETURN
ENDIF

*** Definición de Constantes
#DEFINE GENERIC_READ            2147483648
#DEFINE GENERIC_WRITE           1073741824
#DEFINE FTP_TRANSFER_TYPE_ASCII          1
#DEFINE FTP_TRANSFER_TYPE_BINARY         2
*** Declaración de Funciones
DECLARE LONG FtpOpenFile ;
	IN "wininet.dll" ;
	LONG     hFtpSession, ;
	STRING   lpszFileName, ;
	INTEGER  fdwAccess, ;
	INTEGER  dwFlags, ;
	INTEGER  dwContext
DECLARE LONG InternetReadFile ;
	IN "wininet.dll" ;
	LONG     hFtpSession, ;
	STRING  @lpBuffer, ;
	LONG     dwNumberOfBytesToRead, ;
	LONG    @lpNumberOfBytesRead
*** Realizar la conexión...
*** Abrir el fichero en el servidor
nFichFTP = FtpOpenFile( ;
	nFtp, ;
	"/developr/fox/kb/ReadMe1.txt", ;
	GENERIC_READ, ;
	FTP_TRANSFER_TYPE_ASCII, ;
	0 )
IF nFichFTP = 0
	MESSAGEBOX( "Error: " ;
		+ LTRIM( STR( GetLastError() ) ) ;
		+ " en FtpOpenFile.", 16 )
	InternetCloseHandle( nFtp )
	InternetCloseHandle( nInternet )
	RETURN
ENDIF
*** Abir el fichero en el cliente
nFich = FCREATE( "ReadMe1.txt" )
*** Contruir las variables necesarias
nTama = 0
nLen = 1
*** Bucle de lectura
DO WHILE nLen # 0
	cBuffer = REPLICATE( CHR(0), 2048 )
	*** Leer del fichero en el servidor
	InternetReadFile( ;
		nFichFTP, ;
		@cBuffer, ;
		LEN( cBuffer ), ;
		@nLen ) 
	*** Escribir el fichero en el cliente
	FWRITE( ;
		nFich, ;
		SUBSTR( cBuffer, 1, nLen ) )
	*** Aumentar el tamaño total
	nTama = nTama + nLen
	WAIT WIND "Recibidos " ;
		+ LTRIM( STR( nTama ) ) NOWAIT
ENDDO
WAIT CLEAR
*** Cerrar el fichero local
FCLOSE( nFich )
*** Cerrar el fichero en el servidor
InternetCloseHandle( nFichFTP )
*** Realizar la desconexión...
*** Cierre de la conexión FTP
InternetCloseHandle( nFtp )
*** Cierre del uso del API
InternetCloseHandle( nInternet )
[edit] tocmai am testat bucata de cod de mai sus pe fisierul specificat, si merge "off the shelf", din prima.

**********************************************************

sau daca nu..., un activeX free, care stie mai multe chestii, printre care proxy si transfer pasiv, aici:
http://www.chilkatsoft.com/download/FtpActiveX.msi
pe care il folosesti prin instantiere: loFTP = CREATEOBJECT("ChilkatFTP.ChilkatFTP"), iar loFTP va expune 
prin intellisense metodele si poprietatile activeX-ului. Sau il inserezi intr-un form (in designmode, 
Tools>Options>Controls>ActiveX controls>ChilkatFTP Class, si din ToolBar-ul Form Controls alegi sa afisezi 
activeX-urile, de la butonul cu cãrticele, apoi alegi activeX-ul respectiv si il pui pe form), si atunci vezi si evenimentele lui.
Baftã.
 10/11/2006 11:39:29 PM
User is offlineDoru Constantin
321 posts
3rd




Re: Mai multi parametri pentru FtpGetFile( ) ?
 (Romania)

http://gorila.netlab.cz/ftpc20.html

  Visual FoxPro  COM, DCOM si OLE Automation  Mai multi param...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement