IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

les répertoires partagés


Sujet :

Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 76
    Par défaut les répertoires partagés
    Bonjour,

    Comment peut-on savoir si un répertoire donné est partagé ou pas ?

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    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.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 76
    Par défaut
    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?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 76
    Par défaut
    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.

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    je te propose une autre solution basé sur l'approche de Laurent...
    c'est peut-être trop tard?
    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;
    PS: Laurent Il y a un memory leak dans la FAQ pour la fonction
    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:
    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 );
    j'espère le tout conforme.
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 76
    Par défaut
    Merci, je vais regarder

  7. #7
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Eric Boisvert
    PS: Laurent Il y a un memory leak dans la FAQ pour la fonction
    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.
    Bien vue.
    Merci, c'est corrigé pour la prochaine édition.

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    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:

    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';
    en gros, les pointers PCHAR ou LPTSTR sont en fait des PWideChar...
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/11/2012, 09h21
  2. Réponses: 4
    Dernier message: 19/12/2011, 15h14
  3. lister les répertoires sous dos + partage
    Par pastoi dans le forum Windows
    Réponses: 2
    Dernier message: 15/09/2011, 14h46
  4. [Debutant(e)]Eclipse TOTAL: noyé sous les répertoires
    Par albertl dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 03/05/2008, 22h44
  5. lister les répertoires partagés
    Par koKoTis dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 03/12/2007, 18h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo