Liste de fichiers,rep et sous rep d'un pc distant sans winsock [Résolu]

Signaler
Messages postés
13
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
8 janvier 2008
-
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
-
Bonjour,

Dans le cadre de mon travail, je deois developper en vb6 une application qui permet de lister tous les repertoires et sous repertoires (ainsi que les fichiers) d'un pc distant

Celui ci devra etre accessible grace a son nom (présent dans l'AD) et non grace a son adresse ip

Je voudrai utiliser un autre moyen que Winsock

Peut on y acceder par API ou par WMI , ou par une autre moyen

Si oui lequel

Merci pour vos exemples ou vos idées.

Je suis dispo pour tout complément d'infoamtions

@+

8 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut
Le seul moyen qui le permette, c'est d'utiliser le nom UNC de la machine et que cette machine partage ses disques.
Genre de syntaxe :    \\MaMachineDistante\C
Ces noms sont ceux qui doivent apparaitre dans tes "favoris réseau"
Ensuite, il te suffit de lister les répertoires et fichiers comme s'il s'agissait de ta propre machine (Dir Récursif)

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

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Sachant que le chemin UNC accepte aussi bien le nom que l'adresse IP de la machine.

Donc dans l'exemple de Jack, MaMachineDistante est indifférement soit le nom, soit l'adresse IP de la machine.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
13
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
8 janvier 2008

Ok si j'ai bien compris on peux acceder a tous les fichiers d'un machine en faisant [file://\\nom-machine\c$ \\nom-machine\c$]

Ainsi on accede a tous ces repertoires(ce que je connaissait deja)

Mais comment coder tout cela dans une application vb en donnant comme critere le nom du pc distant ?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Le nom du PC ne suffira pas, il faudra aussi lui donner la lettre du lecteur (C, D ...)
Et tu cherches "dir récursif" dans le moteur de recherche du site
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 Bonsoir,

Ce lien , en vbs et avec wmi, pourrait vous interesser (voir l'exemple avec le .txt).
Evidemment, il ne répond pas entièrement à votre demande.
Reste à remplacer Network par AD ou SAM
Une recherche sur WMI, AD, etc...  sur le forum (et codyx) s'impose.

Bonne continuation.
jean-marc
Messages postés
13
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
8 janvier 2008

Superbe jean-marc, bon boulot et tres rapide

Je connais et j'utilise WMI /et CIMV2 pour tester l'existence d'un fichier (entre autre)

Mais je pensais qu'en utilisant cette méthode sur tous les fichiers des disques, ce seraient trop longs

Je vais pouvoir tester cela des demain au boulot

Par contre une cht'i question, si je souhaite obtenir tous les fichiers et repertoires du disques, puis je mettre cette ligne de code

Select_Ext = Array("*.*") 

la la place de

Select_Ext = Array("xls","xlt","doc","dot","pdf","pps","ppt","htm","txt") ??
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
Re,

Pour selectionner tous les fichiers, sans tenir compte de leur extension:

Set colDisks = objWMIService.ExecQuery _
     ("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK & "")
      
For Each objDisk in colDisks
    Set colFiles = objWMIService.ExecQuery _
         ("Select * from CIM_DataFile where Drive = '" & objDisk.Name & "'")

et suppression du tableau.

Dans l'exemple proposé, il y a recherche sur tous les disks hards du server distant (partagés ou non partagés).
Si on se met dans le cadre de sauvegarde de données, les méthodes proposées
par Jack et Casy sont amplement suffisantes et beaucoup plus rapides.
L'utilisation de wmi autorise une pause casse-croûte (voir la légalité de cette action, pas la pause, mais le listage de tous les répertoires d'un personnel, dans une entreprise) .
De plus, mon exemple est incomplet. L'utilisation du Dictionary diminuerait la lenteur du script (ou augmenterait la performance du script).

jean-marc
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 Bonjour à tous,

Lister tous les répertoires/fichiers sur mon pc = 25' avec wmi.

strComputer = "."
Const ForWriting = 2
Const HARD_DISK = 3

StartScript=Now

Set objDico = CreateObject("Scripting.Dictionary")
objDico.CompareMode = VBBinaryCompare

Set objWMIService = GetObject("winmgmts:" _
     & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")

Set colDisks = objWMIService.ExecQuery _
     ("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK & "")
       
For Each objDisk in colDisks
    Set colFiles = objWMIService.ExecQuery _
         ("Select * from CIM_DataFile where Drive = '" & objDisk.Name & "'")
    For Each objFile in colFiles
        If UCase(Left(objFile.Path,10)) <> "\RECYCLER" And _
           UCase(Left(objFile.Path,27)) <> "\SYSTEM VOLUME INFORMATION" Then
           If objDico.Exists(objDisk.Name) Then
              OldList = objDico.Item(objDisk.Name)
              objDico.Item(objDisk.Name) = OldList & "," & objFile.Name 
           Else
              objDico.Add objDisk.Name , objFile.Name
           End If
        End if           
    Next
      
Next
Set colFiles =  Nothing
Set colDisks =  Nothing
Set objWMIService = Nothing

'Creation fichier txt par server
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objNetwork = CreateObject("Wscript.Network")
Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objTxt = objFso.OpenTextFile(objWshShell.SpecialFolders("Desktop") & _
             "" & "verif_" & objNetwork.ComputerName & ".txt", 2, True)

elements = objDico.Items
i "" : j ""
For i = 0 To objDico.Count-1
    ligne = Split(elements(i),",")
    For j = 0 To UBound(ligne)
        objTxt.Write ligne(j) &vbCrLf
    Next
Next
objTxt.Close

'Destruction des objets
Set objDico = Nothing
Set objTxt = Nothing
Set objFso = Nothing
Set objWshShell = Nothing
Set objNetwork = Nothing

MsgBox "fin du script" &vbCrLf& Now &vbCrLf& StartScript &vbCrLf& _
        DateDiff("n", StartScript,Now) & " minutes"

jean-marc