none
Matcher le chemin (patch) manquant sur un fichier existant ? RRS feed

  • Question

  • Bonjour,

    J'aimerais savoir s'il y existe une façon de trouver le chemin manquant d'un fichier, par exemple j'ai juste les informations de fin d'un patch, genre : "dossier4\dossier5\dossier6\monfichier.txt" et je dois trouver le début. je peux; aussi, indiquer un point de recherche pour le debut du style : "C:\rechercher\dans\"

    Cela donnerais "C:\rechercher\dans\"inconu_\_?\_?"\dossier4\dossier5\dossier6\monfichier.txt"

    J'ai essayé d'utiliser Directory.GetFiles("C:\rechercher\dans\", "*.\dossier4\dossier5\dossier6\monfichier.txt", AllFileDirectory) mais cela ne fonctionne pas.

    le contournement que j'ai fait est un premier scan de tous les patch fichiers trouvés que j'ajoute dans une collection, puis je compare la collection avec l'information connue.

    je trouve ça relativement lourd surtout quand il y a plusieurs milliers de fichiers.


    Cordialement,

    mardi 15 janvier 2013 19:28
    Auteur de réponse

Réponses

  • Bonjour,

    Je ne sais pas l'approche actuelle exacte mais on peut commencer par rechercher dans "c:\rechercher\dans", uniquement un dossier "dossier4" (à un niveau de profondeur quelconque) et éventuellement vérifier alors que l'on trouve bien dossier5, dossier6 puis monfichier.txt (on a toujours à faire une recherche récursive soit-même mais on doit pouvoir se passer de lister tous les fichiers et peut-être selon votre principe actuel, de rechercher à moins d'emplacements).

    Après je ne comprends pas bien le contexte général. Qui place ces fichiers à cet emplacement ? Il est impossible d'intervenir sur leur placement initial ? (si c'est une autre de vos applis, l'idée serait de les mettre à un endroit précis, si c'est l'utilisateur qui choisit, on peut peut-être lui redemander, si ce sont de "vrais" patchs Windows, on doit avoir l'info dans WMI etc... (parfois avoir le contexte général permet éventuellement de suggérer une approche différente).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    mercredi 16 janvier 2013 12:16
    Modérateur

Toutes les réponses

  • Bonjour,

    Je ne sais pas l'approche actuelle exacte mais on peut commencer par rechercher dans "c:\rechercher\dans", uniquement un dossier "dossier4" (à un niveau de profondeur quelconque) et éventuellement vérifier alors que l'on trouve bien dossier5, dossier6 puis monfichier.txt (on a toujours à faire une recherche récursive soit-même mais on doit pouvoir se passer de lister tous les fichiers et peut-être selon votre principe actuel, de rechercher à moins d'emplacements).

    Après je ne comprends pas bien le contexte général. Qui place ces fichiers à cet emplacement ? Il est impossible d'intervenir sur leur placement initial ? (si c'est une autre de vos applis, l'idée serait de les mettre à un endroit précis, si c'est l'utilisateur qui choisit, on peut peut-être lui redemander, si ce sont de "vrais" patchs Windows, on doit avoir l'info dans WMI etc... (parfois avoir le contexte général permet éventuellement de suggérer une approche différente).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    mercredi 16 janvier 2013 12:16
    Modérateur
  • Patrice,

    Merci de vous intéresser a mon problème.

    C'est peut être dur a expliquer le fonctionnement.

    Un développeur doit faire des fichiers de configuration ou dedans il y a des chemins ou serons installées les sources sur des serveurs, le programme sais déjà ou et comment faire pour copier les  sources aux endroits nécessaire. Mais avant le développeur doit développer le fichier de configuration en local ou sur un réseau avant de faire l'installation sur un serveur.

    (pour des besoins de vérification)

    Donc le chemin local pourrait-être "c:\rechercher\dans" dans le dossier "dans" il y a une multitude de dossiers et sous dossiers, et pleins de fichiers.

    Actuellement je fais la lecture du fichier de configuration pour récupérer les bouts de patch avec le fichier correspondant, ça ressemble à "dossier4\dossier5\dossier6\monfichier.txt"

    Donc j'ai les données local ou réseau du début qui est : "c:\rechercher\dans", puis j'ai la fin qui est "dossier4\dossier5\dossier6\monfichier.txt"

    il faut maintenant trouver les dossiers entres.

    Comme j'ai pu dire juste avant je charge en mémoire toutes les arborescences de mon point de départ ("c:\rechercher\dans") puis je refais une boucle pour comparer avec l'informations connue ("dossier4\dossier5\dossier6\monfichier.txt")

    Cela prend beaucoup de temps, je recherche un moyen plus rapide.

    je vais quand même essayer la manip que vous avez écrite cela sera certainement plus rapide


    Cordialement,



    mercredi 16 janvier 2013 18:24
    Auteur de réponse
  • Et ces fichiers ne peuvent pas être placés à un endroit précis  ou les endroits ou ces fichiers peuvent être placés référencés dans un fichier placé à un endroit précis ?

    Sinon essayer peut-être effectivement comme je disais de déjà chercher un "dossier4" sous "c:\rechercher\dans" plutôt que de recenser tous les fichiers directement et de filtrer ensuite...

    Une autre idée qui me vient serait d'utiliser une extension particulière (et actuellement tous les fichiers *.txt présents sous "c:\rechercher\dans" ne sont pas forcément des fichiers de config ?) pour faire une première sélection quitte à écarter ensuite les fichiers en fonction de leur contenu...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    jeudi 17 janvier 2013 12:53
    Modérateur
  • Patrice,

    Je ne peux que répondre le soir et faire le suivit.

    J'ai réussis a faire comme vous avez dit, c'est a dire de rechercher le premier dossier (dossier4) jusqu'a 3 sous arborescences en prenant la base (c'est le max pour trouver le dossier4).

    Cela est relativement moins gourmand en mémoire et cela est beaucoup plus rapide.

    Pour donner une idée de temps

    Avant : 30 minutes
    Maintenant : entre 3 à 4 minutes

    Je suis pleinement satisfait des idées que vous avez eu, merci beaucoup


    Cordialement,

    jeudi 17 janvier 2013 18:05
    Auteur de réponse