Quelqu'un se souvient-il de VB4 ?

Résolu
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011 - 23 janv. 2011 à 08:01
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011 - 24 janv. 2011 à 20:25
Bonjour à tous

Je n'ai, et ne peux me servir techniquement, que VB4. Or il faut que je crée une fonction récursive de recherche de fichiers dans tous les répertoires et sous répertoires d'un répertoire donné.

Je ne dispose donc pas des functions subFolder et autres, apparues en VB5 et+.

Quelqu'un se souvient-il assez de vb4 pour m'aider ? Je sèche depuis 2 jours là dessus. J'ai fait le tour du net mais en vain.

Merci à tous pour le coup de pouce.

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.

16 réponses

whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
24 janv. 2011 à 20:25
Bonjour à vous deux,

Pour un coup, meilleurs voeux aussi, et sincères...

Ca fonctionne. Pas du premier coup mais j'ai adapté et ça tourne. C'est le principal.

Alors encore une fois, un grand merci.

Très cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
23 janv. 2011 à 09:33
salut,

regarde dans mes sources déposés, j'avais fait une classe (vb6) de recherche récursive de fichiers et dossiers par API. à défaut de l'utiliser tel quel il doit être possible de l'adapter ou tout au moins de t'en inspirer

++

[hr]
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
23 janv. 2011 à 09:37
Utilise l'API Windows avec FindFirstFile, FindNextFile et FindClose : http://pastebin.com/PKw3GwAp

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
23 janv. 2011 à 09:58
Bonjour

J'avais vu ton script, PCPT, mais je ne suis pas arrivé à l'adapter à VB4, il manque des fonctions qu'on ne trouve que par la suite.

Par contre, ghysmans99, ça à l'air de tout à fait correspondre à mes besoins. Sauf si cet API est trop récente et donc rejetée par VB4. Je vais essayer ça.

Je cherchais plutôt un truc assez simple (une fois que tu l'as sous les yeux c'est très simple bien sûr...) comme le tri à bulle. Pas rapide peut-être, mais sûr. Une bonne vieille 404 increvable, quoi. Parce que, lorsque j'utilise des ocx plus récents (de 97 ou 98 par exemple, tout est relatif dans plus récent), l'exe plante si je vais sur W2000 ou XP (je ne parle pas de W7). Et pas pour les raisons classiques de MAJ des versions.

Tu penses bien que je m'amuse pas à me mettre tout seul des bâtons dans les roues.

De toutes façons, merci++ à tous les 2. Je vais jeter un oeil sur cet API.

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 janv. 2011 à 11:24
Salut

Je suis étonné que tu dises que VB4 refuse l'utilisation d'API car les API appartiennent à l'OS et leur paramétrage utilise souvent des Long de 32 bits que VB4 connait.
Quel est l'OS sous lequel tu tournes ?
C'est là, je pense, la raison majeure de tes restrictions.

Question :
En VB4, les projets sont (déjà) des VBP ou des MAK ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
23 janv. 2011 à 14:36
Bonjour,

En VB4 les projets sont en VBP.

Pour ce qui est de mon OS, je suis pour l'instant sur un vieux NEC que je fais tourner avec XP. Mais c'est pas prévu pour. Par contre, VB4 ne fonctionne pas au-dessus de XP, et encore, je ne sais pas si je ne l'ai pas déclaré en 2000 pour pouvoir l'installer, voire en 98...

Par exemple, l'aide, à part le tout venant, ne fonctionne pas.

J'ai VB6 mais je n'arrive pas à m'y faire... Plus assez de tête, fainéantise ou trop de différences, mais de faux amis, qui me font planter à qui mieux mieux, je ne sais pas.

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
23 janv. 2011 à 16:50
Pourtant ça serait une bonne idée de migrer, vu que c'est déjà plus supporté après XP. Et Se7en gagne vite du terrain ...

T'as pu tester mon bout de code ?

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 janv. 2011 à 18:04
Bonjour

Il me semble me rappeler que VB4 possédait déjà la fonction Dir.
Si tel est bien le cas (à whombat de confirmer ou infirmer), elle suffit pour le traitement de son problème. Dir n'admet pas directement la récursivité, mais on peut par contre l'appeler dans une fonction récursive et le tour est ainsi joué.
Si whombat nous confirme l'existence de Dir sous VB4, je mettrais ici les quelques lignes de code qui conviennent.

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 janv. 2011 à 23:41
Et non, la fonction ne permet pas la récursivité puisque qu'elle ne possède qu'un seul buffer : En allant lister les fichiers d'un autre répertoire, elle perdra la mémoire de sa position dans le répertoire précédent.
La seul solution consiste à utiliser les APIs, et celur utilisation ne dépend pas de la version du VB mais de celle de l'OS : En 2000, en 98 ou en XP, elles fonctionnent (FindFirstFile est née avec Windows NT 3.1 / W95)

Exemples multiples dans http://logiciel.codes-sources.com/logiciels/API-Guide-197.aspx
0
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
24 janv. 2011 à 02:34
Je me suis absenté quelques heures et, avant tout, je suis venu vous retrouver.

ucfoutu, effectivement j'ai la fonction Dir et pour ce qui concerne les variables à garder en mémoire j'ai la déclaration Public, les tableaux, etc... Bref, je ne suis tout de même pas à la rue...

Bon, jack, je vais aller voir maintenant (j'ai toute la nuit jusqu'à demain midi) cet API. Je te tiendrais au courant.

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
0
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
24 janv. 2011 à 02:55
Bonjour,

jack, je viens d'essayer et VB4 ne prend pas l'API à cause de sa syntaxe.

J'ai essayer de contourner le problème mais ça ne passe pas.

Il me faut pondre une fonction de récursivité et, je ne sais pas pourquoi, je ne l'ai déjà pas en français clair dans ma tête, alors pour la mettre en script...

Il me faut pourtant y arriver...

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 janv. 2011 à 07:16
VB4 c'est 16 bits non?
la déclaration devrait alors être :

Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Integer

Private Type FILETIME
    dwLowDateTime As Integer
    dwHighDateTime As Integer
End Type

Private Type WIN32_FIND_DATA
    dwFileAttributes As Integer
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Integer
    nFileSizeLow As Integer
    dwReserved0 As Integer
    dwReserved1 As Integer
    cFileName As String * 260
    cAlternate As String * 14
End Type


de cette manière çà passe?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 janv. 2011 à 07:43
Bonjour, Jack

Pour te répondre en ce qui concerne la manière d'assurer la récursivité à l'aide d'une fonction ou d'une procédure récursive incluant quant à elle la fonction Dir (et en palliant donc ainsi à la carence de récursivité de la fonction Dir elle même) :
Le plus simple a été pour moi d'aller repêcher le texte d'un message privé que j'ai adressé en son temps à l'un d'entre nous (et dont je suppose qu'absent, il n'a pas eu l'occasion de "tomber" sur la présente discussion) :

en voici le copier-coller :

Le principe n'est pas tellement différent en utilisant dir (il suffit d'obliger vb à en lancer un autre, en rappelant sur elle-même une fonction ou une sub qui le contient).
J'ai choisi ici une sub.
On définit le répertoire à "fouiller" et on détermine un filtre (si on le veut)

Je ne vois pas de balises codes ici (dommage car tu risques d'avoir le tournis... désolé !)


Private Sub CommandButton1_Click()
   Dim rep As String, filtre As String
   rep = "e:\monoutil"
   filtre = "*.txt"
   dir_dans_dir rep, filtre
End Sub

Sub dir_dans_dir(ByVal chemin As String, flt As String)
   Dim Nomfic As String, nbfic As Integer, tremplin As String, i As Integer
   If Right$(chemin, 1) <> "" Then chemin = chemin & ""
   Nomfic = Dir$(chemin, vbDirectory)
   nbfic = 1
   Do While Nomfic <> ""
     If Nomfic <> "." And Nomfic <> ".." Then
       tremplin = chemin & Nomfic
       If GetAttr(tremplin) And vbDirectory Then
         ListBox1.AddItem tremplin & "" & Nomfic
         dir_dans_dir tremplin, flt
         Nomfic = Dir$(chemin, vbDirectory)
         For i = 2 To nbfic
            Nomfic = Dir$
         Next
       Else
         If Nomfic Like flt Then
           ListBox1.AddItem tremplin & "" & Nomfic
         End If
       End If
     End If
     Nomfic = Dir$
     nbfic = nbfic + 1
   Loop
End Sub



Voilà donc, encore que l'on peut bien évidemment faire la même chose, mais pour alimenter un contrôle Treeview (plus agréable à l'utilisation) plutôt que, comme ici, une listbox

Bonne journée.
Jacques



Fin de citation......
Je ne me rappelle pas si VB4 possèdait les contrôles listboxes. Si oui ===>> utilisation du code tel quel.
Si non : je transforme en fonction du contrôle qui sera utilisé sous VB4.

Amitiés.



____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
24 janv. 2011 à 11:10
Bonjour à PCPT et ucfoutu

Mais c'est super. Je vais sûrement en faire mes choux gras.

J'ai eu beau faire travailler ma petite tête, j'avais une erreur... récurrente...

Bon, je m'y mets tout de suite. Merci encore, c'est super.

Ce n'est pas pour mettre dans une listBoxe mais ça je sais faire : adapter le script. Ce serait bien le diable.

De toutes façons je vous tiens au courant.

Merci encore.

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
24 janv. 2011 à 14:44
Re
Pour répondre à ucfoutu (*), oui, ce programme peut fonctionner, mais il est à noter que le Dir exécute une boucle For-Next pour se repositionner au même endroit que lors de sa dernière scrutation (boucle basée sur le nombre de résultats déjà rencontrés, nbfic).

Difficile d'imaginer la perte de temps, donc d'efficacité, s'il s'agissait de lister tous les répertoires et fichiers d'un disque entier.
Mais c'est fonctionnel, c'est le principal.

(*) ça faisait longtemps, ucfoutu : banané !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 janv. 2011 à 16:08
(*) ça faisait longtemps, ucfoutu : banané !


Je sais, jack, mais je ne suis pas non plus tout à fait de retour encore, non plus (une dernière fresque que je viens d'accepter... et je serai ensuite à nouveau plus disponible ...)

Banané (et mais yeurs veus ) à toi également

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
Rejoignez-nous