[C#]Problème de droit d'accès, Outil de recherche

Problème de droit d'accès, Outil de recherche [C#] - C#/.NET managed - Programmation

Marsh Posté le 15-04-2016 à 13:27:02    

Boujour,
J'ai un problème de dans mon programme depuis un certain temps et j'aimerai le résoudre.
Mon programme est un petit outil de recherche, on fonction du nom que l'on introduit ou extention du fichier, tout les ficher sans lister dans une listBox
voici le code qui permet de faire la recherche et ensuite les insérer dans la listeBox

Code :
  1. public void searchButton_Click(object sender, EventArgs e)
  2.         {
  3.             try
  4.             {
  5.                 //recherche tout les fichier du repétoire et du nom demandé et les stock dans la variable files
  6.                 var files = from file in Directory.EnumerateFiles(directoryTextBox.Text, searchTextBox.Text,SearchOption.AllDirectories)
  7.                             select new
  8.                             {
  9.                                 File = file
  10.                             };
  11.              
  12.                 foreach (var f in files)
  13.                 {
  14.                     //f.File name affiche le nom complet du fichier c'est-à-dire qu'il prend le chemin du fichier avec le fichier
  15.                     //j'ai rajouter un subtring pour pouvoir prendre que le nom du fichier en fonction d'ou est placé le dernier "\" du chemin
  16.                     //et le LastIndexOf me permet de connaitre la position de se  dernier "\"
  17.                     fileListBox.Items.Add(f.File.Substring(f.File.LastIndexOf("\\" )+1));
  18.                     //ajoute tout les chemin des fichier dans un tableau pour ensuite les utilisé dans la fonction fileListBox_SelectedIndexChanged
  19.                     arrayFile[y] = f.File;
  20.                    
  21.                     y++;
  22.                 }
  23.                
  24.                
  25.             }
  26.             //si j'ai pas l'accès au fichier
  27.             catch (UnauthorizedAccessException UAEx)
  28.             {
  29.                 // message qui me dit accès refusé au dossier XXX
  30.                 MessageBox.Show(UAEx.Message);
  31.             }
  32.             catch (PathTooLongException PTLEx)
  33.             {
  34.                 MessageBox.Show(PTLEx.Message);
  35.             }
  36.            
  37.         }//fin searchButton_Click


 
le problème dans se code c'est dès qu'un dossier n'est pas accessible le programme se stop, Par exemple si je fait une recherche dans le C:\ et qu'il y a 3dossier, 1-toto,2-toto,3-toto et que le dossier 2-toto n'est pas accessible, mon code va répertorier tous se qu'il y a dans 1-toto et ensuite il va arrivé dans 2-toto et stoper le programme car il n'est pas accessible donc la recherche ne s'effectura pas dans 3-toto.
 
J'aimerai savoir si il serai possible d'avoir un test qui me disent si dossier pas accesible, tu le passe et tu prend le dossier suivant. Ou alors que mon try/catch ne stop pas mon programme et que je puissent continuer a executer mon code une fois que je recois le message comme quoi XXX(le dossier) n'est pas accessible.

Reply

Marsh Posté le 15-04-2016 à 13:27:02   

Reply

Marsh Posté le 15-04-2016 à 14:41:30    

Une personne pourrait-il m'aider ? =(

Reply

Marsh Posté le 18-04-2016 à 09:33:34    

De mémoire malheureusement les méthodes de parcours récursifs de dossiers vont effectivement planter si tu passes sur un répertoire inaccessible/protégé ("System Volume Information", etc).
La meilleure solution c'est de faire la récursion à la main et d'englober dans un try/catch chaque accès à un répertoire.
Ca prend quelques lignes de plus mais ça fonctionne sans faire d'histoires.
Exemples ici : http://www.blackwasp.co.uk/FolderRecursion.aspx (premier tuto trouvé mais il y a plein d'approches)
edit : voir aussi http://stackoverflow.com/a/24440132/461444

 

Et pour info :

Code :
  1. select new
  2. {
  3. File = file
  4. };


C'est lourd et inutile, tu peux écrire directement "select file".


Message édité par TotalRecall le 18-04-2016 à 09:35:35

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 18-04-2016 à 11:21:36    

Merci bien mais depuis j'ai changé mon code, je liste tout les dossier et sous dossier manuellement du répertoire que je sélectionne. Actuellement j'ai un problème qui me donne plusieurs fois le même fichier. Si je ne trouve pas la solution je reviendrai te voir .  

Reply

Marsh Posté le 18-04-2016 à 11:28:13    

galiaker a écrit :

je liste tout les dossier et sous dossier manuellement du répertoire que je sélectionne.


C'est ce que je te répondais justement :D
 
Et ok :o


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed