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 :

Scanner un disque dur


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kazylax
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 278
    Par défaut Scanner un disque dur
    Bonjour,

    J'ai un problème avec un code que j'ai trouver sur une site
    je veux faire un scanne de mon disque dur mais il m'interdit sur certain fichier dedans

    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
     
            const int HowDeepToScan = 7;
            public void prcoessdire(string sourceDir, int recursionLvl)
            {
                scanDir(sourceDir, recursionLvl);
            }
     
            public void scanDir(string sourceDir, int recursionLvl)
            {
                if (recursionLvl <= HowDeepToScan)
                {
                    // Process the list of files found in the directory.
                    string[] fileEntries = Directory.GetFiles(sourceDir);
                    foreach (string fileName in fileEntries)
                    {
                        MessageBox.Show(fileName);
                        //richTextBox1.Text = fileName;
                    }
     
                    // Recurse into subdirectories of this directory.
                    string[] subdirEntries = Directory.GetDirectories(sourceDir);
                    foreach (string subdir in subdirEntries)
                        // Do not iterate through reparse points
                        if ((File.GetAttributes(subdir) &
                             FileAttributes.ReparsePoint) !=
                                 FileAttributes.ReparsePoint)
     
                            scanDir(subdir, recursionLvl + 1);
                }
            }
    Utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scanDir("D:\\", 1);
    c'est le 2eme disque dur sur mon pc ou j'ai tout les droits dessus
    aucun système d'exploitation n'est mis dedans.

    L'erreur est:

    System.UnauthorizedAccessException: L'accès au chemin d'accès 'D:\System Volume Information\' est refusé.
    Sachant que avec le code suivant il scanne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MessageBox.Show(fileName);
    mais avec lui non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     richTextBox1.Text = fileName;
    Si vous avez une petite idée
    Merci

    Cordialement,

  2. #2
    Membre expérimenté
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 159
    Par défaut
    Salut

    J'avais déjà eu ce problème avec un scan anti-virus. Je me souviens plus exactement comment j'avais procédé, j'avais du ajouter un user en contrôle total sur le dossier je crois.

    Bref, c'est un répertoire système protégé, l'utilisateur avec lequel tu exécutes ton scan n'y a pas les droits en acces. Regarde de ce coté là.

  3. #3
    Membre éclairé Avatar de kazylax
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 278
    Par défaut
    Pourtant quand je vais dans (Propriétés/Sécurité) du disque dur
    c'est mis dans Autorisation (Contrôle total) bizarre

    je suis sous vista ca change rien ?

    cordialement,

  4. #4
    Membre expérimenté
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 159
    Par défaut
    Et quand tu vas dans les propriété/sécurité du répertoire en question?

  5. #5
    Membre éclairé Avatar de kazylax
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 278
    Par défaut
    pareil meme droit
    sauf que le dossier (D://System Volume Information) je le trouve pas
    il est invisible

    se qui faudrais c'est ignoré certain dossier mais je n'y arrive pas non plus
    il me dit accés refusé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                        if (fileName == "D:\\$RECYCLE.BIN")
                        {
                            MessageBox.Show("Erreur");
                        }
                        listBox1.Items.Add(fileName);
    Cordialement,

  6. #6
    Membre expérimenté
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 159
    Par défaut
    Affiche les fichiers cachés.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    Tu peux utiliser un try/catch pour gérer ton problème.
    Tu risque d'avoir quelques petits problèmes pour afficher dans un RichTextBox s'il y a beaucoup de fichiers à afficher (l'UI attendra la fin du traitement).
    Par contre tu peux utiliser les thread et un callback avec InvokeRequired pour pouvoir afficher en temps réel par exemple.

    Je te donne un petit exemple de code (à compléter et retravailler bien sûre, par exemple utiliser des exceptions spécifiques, etc...) si ça peut t'aider un peu.

    Tu peux ne reprendre que le try/catch mais au moins ça te donnera peut-être des idées
    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
     
    //Méthode pour lancer le scan.
    public void scan(String sourceDir, int recursionLvl) {
    	ParameterizedThreadStart operation = new ParameterizedThreadStart(scanDir);
    	// Instanciation des threads.
    	Thread t1 = new Thread(operation);
    	t1.Start(new Parameter(sourceDir, recursionLvl));
    }
    const int HowDeepToScan = 7;
    public void scanDir(object o)
    {
    	Parameter p = o as Parameter;
    	if (p.RecursionLvl <= HowDeepToScan) {
    		// Process the list of files found in the directory.
    		string[] fileEntries = Directory.GetFiles(p.SourceDir);
    		foreach (string fileName in fileEntries) {
    			try {
    				AppendText("\n" + fileName);
    			} catch (Exception e) {
    				AppendText("\n" + e.Message);
    			}
    		}
    		// Recurse into subdirectories of this directory.
    		string[] subdirEntries = Directory.GetDirectories(p.SourceDir);
    		foreach (string subdir in subdirEntries)
    			// Do not iterate through reparse points
    			try {
    				if ((File.GetAttributes(subdir) &
    					 FileAttributes.ReparsePoint) !=
    						 FileAttributes.ReparsePoint)
    					scanDir(new Parameter(subdir, p.RecursionLvl + 1));
    			} catch (Exception e) {
    				AppendText("\n" + e.Message);
    			}
    	}
    }
    // callback qui t'empeche des problèmes avec l'interface
    private void AppendText(String s)
    {
    	if (richTextBox1.InvokeRequired) {
    		AppendTextCallback d = new AppendTextCallback(AppendText);
    		this.Invoke(d, new object[] { s });
    	} else {
    		richTextBox1.AppendText(s);
    	}
    }
    delegate void AppendTextCallback(String s);
    // objet qui te permet d'envoyer à ta méthode scanDir les infos nécéssaires
    class Parameter
    {
    	private String sourceDir;
    	private int recursionLvl;
     
    	public Parameter(String sourceDir, int recursionLvl)
    	{
    		this.sourceDir = sourceDir;
    		this.recursionLvl = recursionLvl;
    	}
    	public String SourceDir
    	{
    		get { return this.sourceDir; }
    	}
    	public int RecursionLvl
    	{
    		get { return this.recursionLvl; }
    	}
    }

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/08/2007, 18h31
  2. Numéro de série du disque dur
    Par h_kamel dans le forum Assembleur
    Réponses: 8
    Dernier message: 21/05/2007, 11h28
  3. Récupèrer la liste des disques durs
    Par Tililian dans le forum C++Builder
    Réponses: 4
    Dernier message: 19/06/2003, 12h42
  4. Monter un disque dur USB
    Par Iced Earth dans le forum Matériel
    Réponses: 5
    Dernier message: 13/01/2003, 22h02
  5. Accès direct au disque dur
    Par Berdo dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 12/01/2003, 16h21

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