Liste de fichiers,rep et sous rep d'un pc distant sans winsock

Résolu
PABLOCORREA Messages postés 13 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 8 janvier 2008 - 25 juin 2007 à 20:09
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 26 juin 2007 à 10:11
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

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
25 juin 2007 à 20:24
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)
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
25 juin 2007 à 20:31
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
3
PABLOCORREA Messages postés 13 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 8 janvier 2008
25 juin 2007 à 20:35
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 ?
3
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
25 juin 2007 à 20:53
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
3

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

Posez votre question
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
25 juin 2007 à 20:56
 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
3
PABLOCORREA Messages postés 13 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 8 janvier 2008
25 juin 2007 à 21:10
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") ??
3
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
25 juin 2007 à 22:55
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
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
26 juin 2007 à 10:11
 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
0
Rejoignez-nous