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

API, COM et SDKs Delphi Discussion :

Comment détecter qu'un répertoire est en réseau ?


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Par défaut Comment détecter qu'un répertoire est en réseau ?
    Préalable :
    J'ai fait une recherche sur "Réseau"
    J'ai fait une recherche sur "Répertoire"
    J'ai fait d'autres essais de recherches ...

    J'ai lu tous les résultats de ces recherches ... j'y ai passé plus de 3 heures
    Alors merci par avance de ne pas me répondre qu'il me faut d'abord rechercher dans les sujets déjà traités !

    Contexte de ma question :
    ------------------------
    J'ai une application qui illustre un explorateur avec tous les dossiers accessibles. Cette application affiche toutes les images du dossier sélectionné.
    Je souhaiterais limiter certains processus ( notamment de refresh automatique ) dans le cas où le dossier sélectionné est sur le réseau et non plus "direct".

    Toutes les solutions que j'ai trouvé m'inquiètent car je les trouve "bidouillesques" et je déteste ça.
    Je me dis qu'il doit bien exister une solution précise et cartésienne... mais qu'elle est elle ?

    ExpandUNCFileName et tester si la réponse commence par "\\" ? ...
    1. Faut un nom de fichier pour que cela donne le resultat escompté ... cela oblige donc à aller chercher le nom du 1er fichier de ce dossier... et si le dossier est vide ...
    2. En traçant j'ai trouvé que ce n'était pas une garantie absolue de la réponse notamment dans le cas de "lecteurs réseau déclarés"...

    Bref je n'aimerais pas mourir bête et surtout je suis curieux de savoir s'il y a une réponse que je n'ai pas été foutu de trouver !

  2. #2
    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
    Tu peux utiliser l'api GetDriveType()

    cette fonction retourne ces valeurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    0	              The drive type cannot be determined.
    1	              The root directory does not exist.
    DRIVE_REMOVABLE 	The drive can be removed from the drive.
    DRIVE_FIXED	    The disk cannot be removed from the drive.
    DRIVE_REMOTE	  The drive is a remote (network) drive.
    DRIVE_CDROM	    The drive is a CD-ROM drive.
    DRIVE_RAMDISK	  The drive is a RAM disk.
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Par défaut
    Citation Envoyé par Eric Boisvert Voir le message
    Tu peux utiliser l'api GetDriveType()

    cette fonction retourne ces valeurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    0	              The drive type cannot be determined.
    1	              The root directory does not exist.
    DRIVE_REMOVABLE 	The drive can be removed from the drive.
    DRIVE_FIXED	    The disk cannot be removed from the drive.
    DRIVE_REMOTE	  The drive is a remote (network) drive.
    DRIVE_CDROM	    The drive is a CD-ROM drive.
    DRIVE_RAMDISK	  The drive is a RAM disk.
    Merci de ta réponse... :-)
    J'ai pas essayé ça ... aussi je vais vérifier et te tiens au courant si ça marche...
    EN fait j'ai pas gratté de ce côté des API car j'ai un composant sytème qui me retourne le type du lecteur... or pour les disque fixes réseau il m'indique 'dtfixed' et non pas comme je l'espérais "dtNetWork"...

    J'ai peut être hâtivement considéré que ce composant interrogeait cette fonction ... mais je vais vérifier...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Par défaut
    Alors résultat des courses ....

    Dans l'absolu la réponse est déjà bien plus cohérente que celle de mon composant que je vais m'empresser de virer ... :-)

    GetDriveType renvoit bien "Drive_Remote" si en argument je lui envoies un "Path" réseau

    1. Truc trés interressant pour ceux qui liront ces posts ... c'est que GetDriveType n'attend pas un "drive" en argument mais gère bien tout path transmis...

    2. Par contre me reste un cas de figure idiot à résoudre...
    Le cas ou l'user pointe sur un dossier de son propre ordinateur... mais via le l'item "voisinage réseau" de l'explorateur ...
    Dans ce cas getdriveType ... indique aussi Drive_Remote ... sans qu'on puisse lui en vouloir vraiment ! :-)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Par défaut
    En conclusion ...

    Pour les ceux que cela intéress, voili le code de la fonction que j'utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    FUNCTION IsOrdiDir ( Pat : String ) : Boolean ;
    BEGIN
            Result := False ;  
            IF directoryExists ( Pat ) THEN 
            //  test nécessaire car le composant explorateur illustre des items qui ne sont pas des dossiers...
            BEGIN
                   i := GetDriveType ( Pchar ( Pat ));
                   case i of
                   DRIVE_FIXED : Result := True ; 
                   DRIVE_REMOTE : IF ( Pos ( '\\' + Uppercase ( OrdiName ), Uppercase ( Pat ) = 1 THEN Result := True ;
                   END ;
           END;
    END;
    // Nota : OrdiName est ici une variable qui contient le non de l'ordinateur

    Rmarques :
    1. Si des fois y'en a qui ont une meilleure solution, surtout plus directe ... je suis preneur...

    2. Encore une fois merci de m'avoir fait penser à interroger directement l'API GetdriveType plutôt de faire confiance à un composant qui était censé le faire ...

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    J'allais aussi propose ce matin, GetDriveType, mais lisant l'aide, j'y ai renoncé, pensant qu'il souhaitait un disque et n'ayant pas le temps de le tester, c'est une information intéressante

    cela pourrait mériter de préciser dans FAQ que GetDriveType est ouvert à différent type de chemin ... sans qu'il soit de la forme "C:\DossierLocal" mais aussi de la forme "\\DossierRéseau ..."
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. [Images] Comment détecter qu'un GIF est animé ?
    Par matique dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 06/02/2006, 16h57
  2. Comment détecter si un tableau est vide ?
    Par ErPi dans le forum Langage
    Réponses: 6
    Dernier message: 27/06/2005, 18h50
  3. Réponses: 15
    Dernier message: 27/04/2005, 10h41
  4. [Delphi 6] Comment détecter si un poste est connecté ?
    Par Lung dans le forum Web & réseau
    Réponses: 81
    Dernier message: 22/04/2005, 15h13

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