Bonjour,
Comment peut-on savoir si un répertoire donné est partagé ou pas ?
Bonjour,
Comment peut-on savoir si un répertoire donné est partagé ou pas ?
As-tu regardé dans la FAQ ?
http://delphi.developpez.com/faq/?pa...sterresreseaux
Sinon recherche sur le forum il y a qq discussions sur le sujet.
Tutoriels Delphi Win32/Delphi .NET/Oracle/PowerShell - FAQ Delphi - FAQ Delphi .NET
Beatus, qui prodest, quibus potest.
Merci beaucoup.
Mais juste une question. Cette procédure donne les noms des partages mais on ne peut pas les localiser sur le PC (il n’y a pas de chemin d’accès). J’ai regardé dans MSDN et la structure retournée ne contient pas d’info à ce sujet. J’ai rien trouvé non plus sur le forum. Est-il possible de retrouver les noms complets des partages énumérés ou les localiser autrement?
http://www.swissdelphicenter.ch/torr...de.php?id=1248
La fonction qui teste si un répertoire donné par son chemin est partagé ou pas.
je te propose une autre solution basé sur l'approche de Laurent...
c'est peut-être trop tard?
PS: Laurent Il y a un memory leak dans la FAQ pour la fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 function GetShareFullPath(Serveur:string;ShareName:string):string; var wServerName:array[0..UNCLEN] of WideChar; // 17 wShareName:array[0..UNLEN] of WideChar; //256 pSI2:PShareInfo2; Size:LongWord; Res: NET_API_STATUS; s:string; begin result:=''; if Pos('\\',Serveur)<>1 then Serveur:='\\'+Serveur; StringtoWideChar(Serveur,@wServerName,Length(Serveur)+1); StringtoWideChar(ShareName,@wShareName,Length(ShareName)+1); Res:= NetShareGetInfo(@wServerName,@wShareName,2,Pointer(pSI2)); if Res= No_Error then begin result:=WideCharToString(pSI2^.shi2_path); NetApiBufferFree(@pSI2^); end; end;
EnumererRessources()
Il y a un GetMem() sans FreeMem()
de plus, la fonction est écrite fesant partie d'une form...
je l'ai changé au minimum pour lui donner le même look que les autres.
voici la fonction:
j'espère le tout conforme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 procedure EnumererRessources( aRessource:pNetResource;ListItem:TStrings ); Type TNetResources = array[0..0] of TNetResource; pNetResources = ^TNetResources; var Handle : THandle; NetResources : pNetResources; S : String; Size,Count, Ret,Index : LongWord; begin if WNetOpenEnum( RESOURCE_GLOBALNET, //Indique l'étendue de l'énumération, ici toutes les ressources. RESOURCETYPE_ANY, 0, aRessource, Handle ) = No_Error then begin Ret := No_Error; Size := 50 * Sizeof( TNetResource ); GetMem( NetResources, Size ); while Ret = No_Error do begin Count := $FFFFFFFF; //paramètre in/out Size := 50 * Sizeof( TNetResource ); //paramètre in/out Ret := WNetEnumResource( Handle, Count, NetResources, Size ); if Ret <> No_Error then Break; for Index := 0 to Count - 1 do begin S:='Type d''affichage '; case NetResources[Index].dwDisplayType of //Type affichage, permet de déterminer //le mode d'affichage approprié à la ressource // Ex : RESOURCEDISPLAYTYPE_TREE peut être visualisé // dans un TListView en mode vsReport... RESOURCEDISPLAYTYPE_GENERIC: S :=S+'Générique'; RESOURCEDISPLAYTYPE_DOMAIN : S :=S+'Domaine'; RESOURCEDISPLAYTYPE_SERVER : S :=S+'Serveur'; RESOURCEDISPLAYTYPE_SHARE : S :=S+'Partage'; RESOURCEDISPLAYTYPE_FILE : S:=S+'Fichier'; RESOURCEDISPLAYTYPE_GROUP : S:=S+'Groupe'; RESOURCEDISPLAYTYPE_NETWORK : S:=S+'Réseau'; RESOURCEDISPLAYTYPE_ROOT : S:=S+'Racine'; RESOURCEDISPLAYTYPE_SHAREADMIN : S:=S+'Partage administrateur'; RESOURCEDISPLAYTYPE_DIRECTORY : S:=S+'Répertoire'; RESOURCEDISPLAYTYPE_TREE : S:=S+'Arbre'; RESOURCEDISPLAYTYPE_NDSCONTAINER : S:=S+'NDSCONTAINER' else S:='inconnu'; end; //Type de la ressource Case NetResources[Index].dwType of //C'est un disque partagé RESOURCETYPE_DISK: S:=S+' [disque]'; //C'est une imprimante partagée RESOURCETYPE_PRINT: S:=S+' [imprimante]'; // Soit disque et imprimante ou aucun des 2. RESOURCETYPE_ANY : S:=S+' [autre]'; else S:=S+' [inconnu] '; end; With NetResources[Index] Do begin ListItem.Add(Format('%s %S',[s,lpRemoteName])); // Le temps de traitement peut être long (parcours du réseau) Application.ProcessMessages; if dwUsage and ResourceUsage_Container > 0 then Begin ListItem.Add(' * La dernière ressource est un conteneur, appel récursif.'); EnumererRessources( @NetResources^[Index],ListItem ); end else ListItem.Add('Vous devez vous connecter à la dernière ressource pour l''énumérer.'); end; end; end; WNetCloseEnum( Handle ); FreeMem(NetResources); end; end; // et on l'appele ainsi: EnumererRessources(nil,ListBox1.Items );
Comment dupliquer un disque...ça vous intéresse?
Tutoriel et code source delphi ici
Bien vue.Envoyé par Eric Boisvert
Merci, c'est corrigé pour la prochaine édition.
Tutoriels Delphi Win32/Delphi .NET/Oracle/PowerShell - FAQ Delphi - FAQ Delphi .NET
Beatus, qui prodest, quibus potest.
j'aimerais juste souligner que j'ai eu quelques difficultés avec LM.pas....
j'ai dû ecraser les déclarations suivantes dans mon code comme cela:
en gros, les pointers PCHAR ou LPTSTR sont en fait des PWideChar...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 type PShareInfo2 = ^TShareInfo2; {$EXTERNALSYM _SHARE_INFO_2} _SHARE_INFO_2 = record shi2_netname: PWideChar; shi2_type: DWORD; shi2_remark: PWideChar; shi2_permissions: DWORD; shi2_max_uses: DWORD; shi2_current_uses: DWORD; shi2_path: PWideChar; shi2_passwd: PWideChar; end; TShareInfo2 = _SHARE_INFO_2; {$EXTERNALSYM SHARE_INFO_2} SHARE_INFO_2 = _SHARE_INFO_2; function NetShareGetInfo(servername: PWideChar; netname: PWideChar; level: DWORD; var buf: Pointer): NET_API_STATUS; stdcall; external 'netapi32.dll';
sinon, ca ne fonctionne pas bien...
désolé de pas y avoir pensé tout à l'heure...
Comment dupliquer un disque...ça vous intéresse?
Tutoriel et code source delphi ici
Partager