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 :
- private string getWinmeuPath()
- {
- string path;
- try
- {
- StreamReader iniFile = new StreamReader("path", Encoding.ASCII);
- path = iniFile.ReadToEnd();
- iniFile.Close();
- }
- catch (FileNotFoundException e)
- {
- path = string.Empty;
- }
- if (System.IO.File.Exists(path + winmeuFileName))
- {
- return path;
- }
- else
- {
- System.Management.ManagementClass FDiskClass = new System.Management.ManagementClass("Win32_LogicalDisk" );
- System.Management.ManagementObjectCollection FDisks = FDiskClass.GetInstances();
- foreach (System.Management.ManagementObject FDisk in FDisks)
- {
- if (System.Convert.ToUInt32(FDisk["DriveType"]) == (UInt32)EDiskType.LocalDisk)
- {
- this.progressBar2.Value = 0;
- this.progressBar2.Update();
- path = findFile((string)FDisk["Name"] + @"\", winmeuFileName);
- if (path != string.Empty)
- {
- StreamWriter iniFileW = new StreamWriter("path", false, Encoding.ASCII);
- iniFileW.Write(path);
- iniFileW.Close();
- return path;
- }
- }
- }
- return string.Empty;
- }
- }
- public string findFile(string rep, string fileName)
- {
- DirectoryInfo fol = new DirectoryInfo(rep);
- FileInfo fil = new FileInfo(rep + fileName);
- if (fil.Exists)
- {
- return rep;
- }
- else
- {
- if (rep.Length == 3)
- {
- this.progressBar2.Value = 0;
- this.progressBar2.Maximum = fol.GetDirectories().Length;
- }
- foreach (DirectoryInfo sfol in fol.GetDirectories())
- {
- if (sfol.FullName.Length > 50)
- {
- this.label5.Text = sfol.FullName.Substring(0, 3) + "..." + sfol.FullName.Substring(sfol.FullName.Substring(0, sfol.FullName.LastIndexOf(@"\" )).LastIndexOf(@"\" ));
- }
- else
- {
- this.label5.Text = sfol.FullName;
- }
- this.label5.Update();
- if (rep.Length == 3)
- {
- this.progressBar2.Value++;
- this.progressBar2.Update();
- }
- string path = findFile(sfol.FullName + @"\", fileName);
- if (path != string.Empty)
- {
- return path;
- }
- }
- return string.Empty;
- }
- }
|
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