Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1650 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

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

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2279551
galiaker
Posté le 15-04-2016 à 13:27:02  profilanswer
 

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.

mood
Publicité
Posté le 15-04-2016 à 13:27:02  profilanswer
 

n°2279553
galiaker
Posté le 15-04-2016 à 14:41:30  profilanswer
 

Une personne pourrait-il m'aider ? =(

n°2279635
TotalRecal​l
Posté le 18-04-2016 à 09:33:34  profilanswer
 

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
n°2279639
galiaker
Posté le 18-04-2016 à 11:21:36  profilanswer
 

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 .  

n°2279640
TotalRecal​l
Posté le 18-04-2016 à 11:28:13  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

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

 

Sujets relatifs
[Ada][cybernetic] intégrer le système : approche neurale du problème.Les meilleurs livres pour un novice total en C++ ?
probleme graph vbaLANGAGE C : MAC FLOODING
probleme programme arduino shield infrarouge ap.photo canon eos 500dbesoin de gagner du temps sur le cacul de recherche dans gros fichier
Problème début WAMPTraduction d'un programme C en python
Recherche de donnéesOù, comment et sur quel OS apprendre le C++ ?
Plus de sujets relatifs à : [C#]Problème de droit d'accès, Outil de recherche


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR