[C#] Rechercher un fichier sur le disque "rapidement"

Rechercher un fichier sur le disque "rapidement" [C#] - C#/.NET managed - Programmation

Marsh Posté le 09-03-2006 à 15:14:03    

Salut,
 
Alors voilà, j'ai un fichier "dtc.com" sur mon disque.
Mais je sais pas où il est.
Mon programme doit le trouver, afin de jouer avec des fichiers qui sont dans le même répertoire.
 
J'ai écrit ça :
 

Code :
  1. private string getWinmeuPath()
  2.  {
  3.   string path;
  4.   try
  5.   {
  6.    StreamReader iniFile = new StreamReader("path", Encoding.ASCII);
  7.    path = iniFile.ReadToEnd();
  8.    iniFile.Close();
  9.   }
  10.   catch (FileNotFoundException e)
  11.   {
  12.    path = string.Empty;
  13.   }
  14.   if (System.IO.File.Exists(path + winmeuFileName))
  15.   {
  16.    return path;
  17.   }
  18.   else
  19.   {
  20.    System.Management.ManagementClass FDiskClass = new System.Management.ManagementClass("Win32_LogicalDisk" );
  21.    System.Management.ManagementObjectCollection FDisks = FDiskClass.GetInstances();
  22.    foreach (System.Management.ManagementObject FDisk in FDisks)
  23.    {
  24.     if (System.Convert.ToUInt32(FDisk["DriveType"]) == (UInt32)EDiskType.LocalDisk)
  25.     {
  26.      this.progressBar2.Value = 0;
  27.      this.progressBar2.Update();
  28.      path = findFile((string)FDisk["Name"] + @"\", winmeuFileName);
  29.      if (path != string.Empty)
  30.      {
  31.       StreamWriter iniFileW = new StreamWriter("path", false, Encoding.ASCII);
  32.       iniFileW.Write(path);
  33.       iniFileW.Close();
  34.       return path;
  35.      }
  36.     }
  37.    }
  38.    return string.Empty;
  39.   }
  40.  }
  41.  public string findFile(string rep, string fileName)
  42.  {
  43.   DirectoryInfo fol = new DirectoryInfo(rep);
  44.   FileInfo fil = new FileInfo(rep + fileName);
  45.   if (fil.Exists)
  46.   {
  47.    return rep;
  48.   }
  49.   else
  50.   {
  51.    if (rep.Length == 3)
  52.    {
  53.     this.progressBar2.Value = 0;
  54.     this.progressBar2.Maximum = fol.GetDirectories().Length;
  55.    }
  56.    foreach (DirectoryInfo sfol in fol.GetDirectories())
  57.    {
  58.     if (sfol.FullName.Length > 50)
  59.     {
  60.      this.label5.Text = sfol.FullName.Substring(0, 3) + "..." + sfol.FullName.Substring(sfol.FullName.Substring(0, sfol.FullName.LastIndexOf(@"\" )).LastIndexOf(@"\" ));
  61.     }
  62.     else
  63.     {
  64.      this.label5.Text = sfol.FullName;
  65.     }
  66.     this.label5.Update();
  67.     if (rep.Length == 3)
  68.     {
  69.      this.progressBar2.Value++;
  70.      this.progressBar2.Update();
  71.     }
  72.     string path = findFile(sfol.FullName + @"\", fileName);
  73.     if (path != string.Empty)
  74.     {
  75.      return path;
  76.     }
  77.    }
  78.    return string.Empty;
  79.   }
  80.  }


 
Ca marche très bien.
Sauf que quand je sais pas déjà où il est, ça met 3 plombes à le trouver.
Et je vais faire tourner cette appli sur des vieux bouzins de quand ma grand-même avait des dents de lait, et donc faut que je trouve une solution qui va un peu plus vite...
 
En fait, dès que j'arrive dans un répertoire où y'a pas mal de trucs c'est d'une lenteur abominable. J'ai l'impression que "directoryinfo" doit directement charger la liste des fichiers à l'instanciation, ou une connerie comme ça, c'est pas possible :/
 
Et vu que le dossier d'install par défaut c'est "c:\winmeu", je suis certain de me pallucher tout le disque avant de trouver l'appli, donc ça a intéret à booster un peu :/
 
(bon, j'ai résolu une partie du problème en créant un fichier "path" qui contient le dernier chemin trouvé, ce qui me permet de ne faire cette recherche que la première fois. mais vu comme je connais les utilisateurs -caissières dans une chaîne de magasin- elles n'auront jamais la patience la première fois...)


Message édité par Arjuna le 09-03-2006 à 15:18:57
Reply

Marsh Posté le 09-03-2006 à 15:14:03   

Reply

Marsh Posté le 06-04-2006 à 11:37:24    

Personne ne m'a jamais répondu :o
 
Alors, y'a une solution rapide pour rechercher de façon un fichier sur le disque ?
(sans passer par Textsearch évidement, c'est pas fiable, surtout pour trouver un EXE...)

Reply

Sujets relatifs:

Leave a Replay

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