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

C# Discussion :

Disques durs physiques en C#


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 111
    Points : 53
    Points
    53
    Par défaut Disques durs physiques en C#
    Bonjour les experts;

    Je roule sous XP Ed Fam et je programme un peu avec Visuel Studio 2008.

    Question: pour accélérer une recherche de fichier, je désirerai affecter un thread par disques durs présents et "ready" sur mon PC, qui s'accomplirait de sa tache.
    Or la classe DriveInfo ne fournit que les lecteurs logiques et en cas de partitions multiples sur le même disque, je ne voudrai pas lancer plusieurs threads à la recherche d'un fichier.
    Existe t-il une classe qui répertorie les disques durs physiques ??? Comment les identifier ???

    Autre question: j'ai créé une fonction récurrente (que j'appelle plusieurs fois) pour la recherche d'un fichier fichier ... j'utilise un tableau de directory crée par Directory.GetDirectories() et ensuite la basique File.Exists(.... path). Donc dans ma pile d'appels (sous debug), le fonction apparait plusiurs fois (c'est normal). Mais question: quand le fichier recherché est trouvé par une fonction, je voudrais arrêter toutes les fonctions appelées pour la recherche (vider la pile pour cette fonction là). Chez moi, les autres fonctions dans la pile continuent a "chercher". Comment faire ???

    Merci d'avance de votre aide

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 156
    Points : 25 075
    Points
    25 075
    Par défaut
    pour trouver la liste des disques physiques voir wmi et wmi code creator

    pour la recherche j'ai pas très bien compris donc il faudrait expliciter un peu, parce qu'une fonction récursive en général on fait return appelfonction(param) et avec un return quand tu as trouvé ca devrait sortir

    sinon je pense que pour la récursivité, le framework peut s'en occuper (edit : en vb.net on l'a en effet mais via My.Computer.FileSystem.GetFiles de la dll microsoft.visualbasic)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    sinon je pense que pour la récursivité, le framework peut s'en occuper (edit : en vb.net on l'a en effet mais via My.Computer.FileSystem.GetFiles de la dll microsoft.visualbasic)
    En .Net on a Directory.GetFiles pour ça, et c'est aussi valable pour VB.Net donc. La DLL microsoft.visualbasic ne devrait même pas exister
    Pas de questions techniques par MP

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 156
    Points : 25 075
    Points
    25 075
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    En .Net on a Directory.GetFiles pour ça, et c'est aussi valable pour VB.Net donc. La DLL microsoft.visualbasic ne devrait même pas exister
    je sais bien mais je pensais que directory.getfiles ne proposait pas de surcharge permettant de chercher dans les sous dossiers, alors qu'on dirait que si en fait

    quant à la dll microsoft.visualbasic, elle est plutot pas mal, elle a permit à ceux qui venaient de vb6 de retrouver quelques mots clés, et elle a quelques fonctions déjà codés, un bon framework est un framework qui contient plein de choses déjà codées ... (on a le like aussi par exemple)
    après je suis d'accord qu'elle contient trop de choses redondantes et moins axé POO
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 111
    Points : 53
    Points
    53
    Par défaut
    Merci à Pol63 et StormimOn pour vos réponses.

    J'ai oublié de dire que j'utilise le langage C# (avec Visual Studio 2008) et non VB.
    wmi ne me donne pas les disques physiques ??? C'est ceux là que je veux identifier. La classe DriveInfo traite les lecteurs logiques. Je veux lancer une recherche sur chaque disque dur en multithreading (un thread par disque dur).
    Pour la recherche de fichiers dans des répertoires, j'ai toute une panoplie de méthodes dans les classes Directory ou DirectoryInfo ... là pas de souci. Mon second ambarras est: ma fonction recursive de recherche empile des appels dans la "Pile des appels" , c'est normal. Par contre, quand une "fonction de recherche" a trouvé le fichier recherché, les autres fonctions, présentes dans la pile, continuent à chercher. Comment arrêter proprement la recherche ???

    merci par avance pour votre aide.

  6. #6
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Pourquoi vouloir le faire par disque dur physique ? Parce que les méthodes pour chercher les fichiers ne se basent pas là dessus, donc je vois mal comment tu pourrais faire ta recherche à partir de là.
    Pas de questions techniques par MP

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 156
    Points : 25 075
    Points
    25 075
    Par défaut
    je me doute que tu es sur c#, on est sur le forum c# (mais vb.net a le même framework)

    concernant l'utilité de faire une recherche multithreadé ca me semble une bonne idée, car chaque disque physique a sa propre tete de lecture
    donc en partant de là on peut faire un thread par disque physique, avec une recherche qui parcourt chaque disque logique
    par contre autant que pour lire des fichiers c'est utile, pour faire une recherche sur la table d'allocation des fichiers je ne sais pas ... c'est à tester ...

    pour wmi si tu oses me dire que ca ne donne pas les disques physiques c'est que tu as mal cherché !

    pour ta récursivité, sur quoi tu la fait ? car si getfiles le fait tu n'en as plus besoin
    et si c'est les threads que tu veux arrêter tu as mal expliqué ton problème
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Je pense avoir compris pour la récursivité. La méthode Directory.GetFiles rend la main une fois qu'elle a fini de tout scanner, alors qu'il veut s'arrêter dès que l'on trouve un fichier qui correspond. Donc il faut le faire soit même, en faisant un Directory.GetFiles répertoire par répertoire, histoire de pouvoir s'arrêter au plus tôt.
    Pas de questions techniques par MP

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/05/2013, 12h07
  2. VM + live cd + disque dur physique
    Par malgach dans le forum VMware
    Réponses: 0
    Dernier message: 15/08/2011, 21h21
  3. Lecture du N° série physique du disque dur
    Par touhami dans le forum Delphi
    Réponses: 9
    Dernier message: 01/02/2007, 19h58
  4. Réponses: 4
    Dernier message: 27/07/2006, 15h27
  5. Recuperer les infos physique du disque dur(marquer,N:Serie )
    Par AKSEL dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 07/08/2005, 11h24

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