Asaiel
Messages postés37Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention21 septembre 2006
-
15 oct. 2005 à 10:20
PCPT
Messages postés13280Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
16 oct. 2005 à 22:18
Bonjour,
J'utilise une appli vb6 sous windows xp pr lister les fichiers de mon serveur (distant) dans une textbox. Tant que je navigue dans des répertoires peu épais, aucun pbm, mais dès que je tente d'ouvrir des chemin comme c:\windows\system32, le transfert se lance un moment, puis s'arrête et je n'obtiens aucun résultat... J'ajoute que en locale, bien que l'appli soit un peu lente, aucun probleme. Mais des que le tout transite par internet, ca ne foncitonne plus....
Le code:
coté serveur:
Const SEPARATOR As String = "<END>"
On Error GoTo erreur2
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.getfolder(Right(Data, Len(Data) - 3))
For Each X In folder.subfolders
sck.SendData "053<DIR>" & X.Path: DoEvents
Next
For Each X In folder.Files
sck.SendData "053<FILE>" & X.Path: DoEvents
Next
sck.SendData "053" & SEPARATOR
Exit Sub
erreur2:
sck.SendData "0532"
coté client:
Const SEPARATOR As String = "<END>"
Static Buffer As String
If Mid(Data, 4, 1) <> "2" Then
Buffer = Buffer & Data
If Right(Buffer, Len(SEPARATOR)) <> SEPARATOR Then Exit Sub
newdata = Left(Buffer, Len(Buffer) - (Len(SEPARATOR) + 3))
Buffer = ""
For i = 0 To UBound(Split(Right(newdata, Len(newdata) - 3), "053"))
list = Split(Right(newdata, Len(newdata) - 3), "053")(i)
If list <> "" Then
typ = Split(list, ">")(0) & ">"
Form8.lstdir.AddItem typ & Split(list, "")(UBound(Split(list, "")))
End If
Next
Else
b = MsgBox("Le lecteur sélectionné est inaccessible.", vbInformation + vbOKOnly, "Erreur")
End If
Ce que je ne comprends vraiment pas, c'est que chaque fichier fait l'objet d'une procédure d'envoi, donc pourkoi est ce que ca se met à bloquer d'un seul coup.....
Voila, j'aimerais beaucoup terminer ce projet, je compte donc sur vous et vous remercie de votre aide....
PCPT
Messages postés13280Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201848 15 oct. 2005 à 13:20
umm. ok. çà ne fonctionne pas du tout de cette manière.
en local, oui. tu envoies, tu es certain que le Data de GetData sera la même que le SendData.
mais déjà en Lan, on constate quelques différences. et en Wan, çà devient presque de l'aléatoire.
voici, d'après tes informations, les modifs que j'apporterais...
ATTENTION, j'ai changé tes balises par <.BLABLA> à cause de la colorisation syntaxique
(html, sans rapport pour toi)
et tes codes "053" etc... sont aussi entre <>
pour éviter justement qu'une data le contienne (caractère interdit)
'*** = modif en dessous
'--------------
' coté serveur
'--------------
Const SEPARATOR As String = "<.END>" '<.- déclaré en "(Général)" ou Module
'_______________________________________________________________________
Private Sub Listing_FSO_And_Send()
'blabla avant, déclarations, etc...
On Error GoTo erreur2
Set fso = CreateObject ("Scripting.FileSystemObject")
Set folder = fso.getfolder(Right(Data, Len(Data) - 3))
For Each X In folder.subfolders
'***
sck.SendData "<.053><.DIR>" & X.Path: DoEvents
Next
For Each X In folder.Files
'***
sck.SendData "<.053><.FILE>" & X.Path: DoEvents
Next
'***
sck.SendData "<.053>" & SEPARATOR: DoEvents
'***
Set fso = Nothing
Exit Sub
'****
On Error GoTo 0 'fin gestion
erreur2:
'***
sck.SendData "<.0532>": DoEvents
'****
Debug.Print Err.Description
Err.Clear
Set fso = Nothing
End Sub
'--------------
' coté client
'--------------
Const SEPARATOR As String = "<.END>" '<.- déclaré en "(Général)" ou Module
'_______________________________________________________________________
Private Sub sck_DataArrival_blablabla()
Static Buffer As String
Dim Data As String
' Dim newdata As String
' Dim list As String
' Dim typ As String
Dim DataDir() As String
Dim DataFile() As String
Form1.sck.GetData Data, vbString
'***
'et c'est ici directement qu'il faut gérer le buffer!!!!
Buffer = Buffer & Data
If Right (Buffer, Len(SEPARATOR)) <> SEPARATOR Then Exit Sub
'on remet la Data complète dans Data, sans SEPAR. plus pratique, et çà évite les oublis
Data = Left(Buffer, Len(Buffer) - Len(separ))
Buffer = ""
'on regarde si Data contient le code erreur
If InStr (1, Data, "<.0532>") > 0 Then
MsgBox "Le lecteur sélectionné est inaccessible.", vbInformation + vbOKOnly, "Erreur"
Exit Sub
End If
'on retravaille les tableaux
'DataDir(0) sera vide. la dernière valeur contiendra le dernier dossier
'ainsi que tous les fichiers. on reprend donc juste la gauche
'du dernier jusqu'à la balise des fichiers
DataDir(UBound(DataDir)) = Left(DataDir(UBound(DataDir)), _
InStr(1, DataDir(UBound(DataDir) - 1), "<.053><.FILE>"))
'DataFile(0) aura tous les dossiers + le 1er fichier. même principe, mais Rev (Reverse)
DataFile(0) = Right (DataFile(0), InStrRev(DataFile(0), "<.053><.DIR>") - 1)
'et après, ici, tu fais ce que tu veux....
Dim i As Long
For i = 1 To UBound(DataDir)
Debug.Print "053 DOSSIER = " & DataDir(i)
Next i
For i = 0 To UBound (DataFile)
Debug.Print "053 FICHIER = " & DataFile(i)
Next i
PCPT
Messages postés13280Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201848 15 oct. 2005 à 11:04
salut,
***il manque tes DoEvents pour le <END> et le ERROR...
***tu as oublié de faire un sck.GetData DATA
***espérons que les constantes soient déclarées en Générale
Asaiel
Messages postés37Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention21 septembre 2006 15 oct. 2005 à 11:20
Salut,
Merci de ta réponse, en effet il manque des doevents que je vais rajouter.
En ce qui concerne le get data, je nai mis qu'une portion du code en illustration, mais je l'ai bien evidemment ecrit dans le code de l'appli, sans ca j'aurais rien du tout, meme pas en local...:D
En tout cas je te remercie, et pour le reste ca te parait bon?
PCPT
Messages postés13280Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201848 15 oct. 2005 à 11:38
et bien une chose me gène également, c'est l'acceptation du buffer + tests uniquement si le 4e carac n'est pas un "2" (donc pas ton erreur 0532 supposée".
il est possible que tu listes plusieurs fichiers et que ta partie soit coupée à ....
"blablablabla053syst" "em32blablabla etc......053 etc...."
ou même juste un dossier normal nommé 2file (donc précédé de 053)
donc tu aurais un code erreur parce que la découpe n'est pas toujours faite comme on le croit.
et pour le reste, il me faudrait un peu plus de code (les vraies déclarations, etc...) pour être certain de ne pas t'induire en erreur
PCPT [AFCK]
Vous n’avez pas trouvé la réponse que vous recherchez ?
Asaiel
Messages postés37Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention21 septembre 2006 15 oct. 2005 à 12:16
En effet, tu formule la une remarque particulièrement judicieuse à laquelle je n'avais pas pensé....... Tu as otut a fait raison et je me penche illico sur le pbm, en attendant je te laisse quand meme l'ensemble du code (avant modification):
coté serveur:
Const SEPARATOR As String = "<END>"
On Error GoTo erreur2
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.getfolder(Right(Data, Len(Data) - 3))
For Each X In folder.subfolders
sck.SendData "053<DIR>" & X.Path: DoEvents
Next
For Each X In folder.Files
sck.SendData "053<FILE>" & X.Path: DoEvents
Next
sck.SendData "053" & SEPARATOR: DoEvents
Exit Sub
erreur2:
sck.SendData "0532": DoEvents
coté client:
Const SEPARATOR As String = "<END>"
Static Buffer As String
Dim newdata As String
Dim Data As String
Dim list As String
Dim typ As String
Form1.sck.GetData Data, vbString
Select Case Left(Data, 3)
Case is ="053"
If Mid(Data, 4, 1) <> "2" Then
Buffer = Buffer & Data
If Right(Buffer, Len(SEPARATOR)) <> SEPARATOR Then Exit Sub
newdata = Left(Buffer, Len(Buffer) - (Len(SEPARATOR) + 3))
Buffer = ""
For i = 0 To UBound(Split(Right(newdata, Len(newdata) - 3), "053"))
list = Split(Right(newdata, Len(newdata) - 3), "053")(i)
If list <> "" Then
typ = Split(list, ">")(0) & ">"
Form8.lstdir.AddItem typ & Split(list, "")(UBound(Split(list, "")))
End If
Next
Else
b = MsgBox("Le lecteur sélectionné est inaccessible.", vbInformation + vbOKOnly, "Erreur")
End If
End Select
Je crois que j'ai rien oublié, sinon je posterais ce qui manque.... En tout cas merci a toi de te pencher sur le problème :D
Asaiel
Messages postés37Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention21 septembre 2006 15 oct. 2005 à 19:51
Merci beaucoup d'avoir consacré du temps a ce problème.
J'ai appliqué ta méthode et ca a l'air de tres bien marcher (encore + vite qu'avant). J'ai simplement corrigé un ou deux bugs et tout a l'air bon, en tout cas en local.
Je le testerais demain via internet et te tiendrais au courant.
En tout cas, mille fois merci de m'avoir consacré un peu de temps.
Asaiel
Messages postés37Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention21 septembre 2006 16 oct. 2005 à 22:07
Re
Alors la, je n'ai qu'un seul mot: MERCI,MERCI,MERCI,MERCI,MERCI,MERCI
Ca marche nickel, exactement comme je le voulais et assez rapidement, c vraiment génial.
Concernant les corrections que j'ai apportées, il ne s'agit pas a proprement parler de bugs, mais simplement d'adaptations faites au code pour qu'il s'intègre bien dans mon appli, mais ta méthode marche nickel...
Donc encore une fois MERCI d'avoir consacré un peu de temps à ce problème... J'en recontrerai surement d'autres, j'espère que l'on aura de nouveau l'occasion de discuter à ce moment la...
PCPT
Messages postés13280Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201848 16 oct. 2005 à 22:18
je me disais aussi .. pas de bug
il y a un point à mieux gérer par contre....
dans ton FSO, pour le OnError, il faut faire un sck.SendData "<0532>" & SEPARATOR: DoEvents
bah vui .. sinon, le client attendra toujours une suite alors qu'il n'y en aura pas ;)
@ bientôt. content quez tu sois content
PCPT [AFCK]