IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Exclure un répertoire lors d'une recherche


Sujet :

Langage Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Exclure un répertoire lors d'une recherche
    Bonjour à tous,

    Je suis sous delphi 2005

    Je suis à la recherche d'une méthode qui pourrait m'éviter de suprimer fichiers/dossiers, dans un repertoire.

    En fait, dans mon code, je fais une recherche de certains fichiers/dossiers sur tous le disque dur, (ces noms se trouvent dans une stringlist en début de code).
    Seulement, j'ai eu le cas que le nom d'un fichier recherché, existe aussi pour un autre logiciel..
    Et dans ce cas, il est lui aussi supprimé, alros qu'il ne faut pas.
    J'ai essayé une méthode, qui consistée a renommer le fichier a conserver, mais cele ne fonctionne pas toujours, surtout lorsque la ressource est utilisée par le système.

    Voilà mon petit soucis..

    Alors existe'il une fonction qui permettent "d'ignorer" un repertoire précis?
    Ou alors une autre méthode, qui me semble mieux:

    Je dois supprimer le fichier B qui contient X.exe
    Seulement, le dossier B, existe en double sous un autre chemin, avec plusieurs fichiers/sousèdossiers dedans..
    Et bien sur, il ne faut pas que je le supprime.

    Comment faire, pour tester le contenu d'un dossier afin de le faire supprimer si le contenu correspond?

    Je veux dire par là:

    Si le dossier C:\Program Files\B contient X.exe, alors suppression de dossier B, sinon, pas de suppression.

    Je pense que mon raisonnement est logique, mais pour la synthaxe, je bloque pas mal...


    Merci d'avoir pris le temps de me lire, et merci pour l'aide

  2. #2
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not FileExists(Dossier + Fichier) then SupprimeDossier

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    Si le dossier C:\Program Files\B contient X.exe, alors suppression de dossier B, sinon, pas de suppression.
    Bigre ne serait-ce pas plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If FileExists('C:\Program Files\B\X.exe') 
    then SupprimeDossier_B
    else PasSupprimerDossier_B;
    A+

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 665
    Points
    5 665
    Par défaut
    Fio,

    J'aurais plutôt limité la recherche aux répertoires où devraient se trouver les dossiers à supprimer (je suppose que tu les connais, sinon je ne vois pas trop où tu vas)

    ET / OU maintenir une liste des répertoires à ne pas toucher.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonjour à tous,

    Tout d'abord, désolé pour le délai de réponse, mais je n'étais pas disponible.

    Ensuite, merci pour vos réponses.

    bon, pour expliquer mon soucis plus en détail, je fais une recherche de manière récursives, de certains fichiers/dossiers, sur tout le disque dur (partition système).

    il m'est arrivé, de croiser un fichiers ayant le même nom, mais dans un reprtoire qu'il ne faut pas toucher.
    Et ce que je voudrais essayer de faire, c'est soit d'exclure certains repertoires de ma recherche, soit de tester si le repertoire contient bien ce que je veux supprimer, a condition, que ce même rep, soit le bon (je ne sais pas si c'est clair..)

    Pour ma recherche, j'ai en début de code 2 Stringlist, l'une comprendsles fichiers, et l'autre les dossiers que je dois supprimer.

    J'ai pensé, a faire une autre StringList, qui contient le nom des repertoires qui ne faut pas toucher, mais là encore, du jour au lendemain, un nouveau reprtoire, peut très bien contenir les fichiers que je recherche, et donc, causer des soucis.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If FileExists('C:\Program Files\B\X.exe') 
    then SupprimeDossier_B
    else PasSupprimerDossier_B;
    J'ai essayé ce code, amis sans résultat.

    Enfin, j'ai plutôt modifié comme ceci (en gros):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ChDir(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')));
    If FileExists('Dossier_B\X.exe') 
    then SupprimeDossier_B
    else PasSupprimerDossier_B;

    Mais sans succés..Pourtant, je trouve cela logique!
    Je me déplace dans le HomeDrive, je cherche si le Dossier_B contient X.exe, et je le supprime si c'est bon...

    Mais je bloque quand même..

    Merci par avance!

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    Le bout de code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If FileExists('C:\Program Files\B\X.exe') 
    then SupprimeDossier_B
    else PasSupprimerDossier_B;
    était simplement un exemple où le dossier "B" fait partie, dans l'arborescence du disque, de la branche (de cet arrbe) nommée 'Program Files' du disque C:.

    Pour obtenir ton résultat pour l'arborescence du disque il faut traduire en généralisant par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If FileExists('C:\Branche1\Sous_Branche1\Sous_Branche2\ ...\Sous_brancheN_1\B\X.exe') 
    then SupprimeDossier_B
    else PasSupprimerDossier_B;
    ... la partie 'C:\Branche1\Sous_Branche1\Sous_Branche2\ ...\Sous_brancheN_1\B\' est le chemin d'accès au fichier 'X.exe' et il faut appeler la fonction FileExists avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If FileExists(monCheminDAcces+nomCourtDeMonFichier) 
    then SupprimeDossier_B
    else PasSupprimerDossier_B;
    ... et comme le dossier 'B' est la partie terminale de la string monCheminDAcces il faudra ajouter une condition suppllémentaire du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (pos('\B\',monCheminDAcces)>0)
    and (FileExists(tagada) then ...
    ... et comme t'as mis des trucs dans une stringlist, tu pourras trouver ici (voir le message du 06/12/2007, 16h52) :
    http://www.developpez.net/forums/sho...hlight=Dossier
    du code qui te place dans une StringList toute l'arborescence des dossiers et sous-dossiers d'un disque par récursivité indirecte. Les lignes de cette StringList correspondendent à monCheminDAcces0, monCheminDAcces1, etc.

    A+

  7. #7
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    Citation Envoyé par JLUC1 Voir le message
    il m'est arrivé, de croiser un fichiers ayant le même nom, mais dans un reprtoire qu'il ne faut pas toucher.
    Et ce que je voudrais essayer de faire, c'est soit d'exclure certains repertoires de ma recherche,
    je crois que tu as répondu toi même à la question

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonjour à tous,

    Décidement, j'accumule les retard de réponses..
    Désolé.


    Citation Envoyé par edam Voir le message
    je crois que tu as répondu toi même à la question
    Oui, mais commet faire?
    Entrer ces répertoires dans un string list, et ne pas les "compter" lors de la recherche?
    Si oui, iol faut appeler quoi comme fonction pour cela?


    @Gilbert Geyer

    Je comprends vien ce que tu veux me dire, seulement, j'aimerais utiliser:

    ChDir(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE'))); ou SYSTEMDRIVE
    Afin de rechecher par cette variable d'environnement.

    Seulement lorsque je fais (ou dossier B est a conserver):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ChDir(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')))
    
    If FileExists('B\X.exe') 
    then PasSupprimerDossier_B;
    Cele ne fonctionne pas.


    Merci.

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    j'aimerais utiliser: ChDir(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE'))); ou SYSTEMDRIVE
    Pour utiliser ChDir(S: string); il faut que la string S donne le chemin d'accès complet au dossier "B" ciblé comme par exemple S:='D:\Branche1\Sous_Branche1\Sous_Branche2\ ...\Sous_brancheN_1\B\'; c'est à dire la partie de l'arborescece qui amène au dossier ciblé.

    'HOMEDRIVE' n'a aucun intérêt si ton appli est logée dans le drive 'C:\...' et que le dossier ciblé se trouve dans le drive 'D:\...'.

    A+

Discussions similaires

  1. [Débutant] Exclure une extension lors d'une recherche dans un répertoire
    Par Martipit dans le forum VB.NET
    Réponses: 5
    Dernier message: 05/05/2012, 23h02
  2. Cheval de Troie lors d'une recherche google
    Par SLE dans le forum Sécurité
    Réponses: 8
    Dernier message: 14/03/2006, 17h41
  3. Probleme lors d'une recherche sur les forums
    Par JUSTIN Loïc dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 8
    Dernier message: 27/07/2005, 12h22
  4. [LG]Runtime Error lors d'une recherche dans un fichier
    Par Fraynor dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2005, 22h51
  5. Enlever la surbrillance lors d'une recherche avec vi
    Par sekiryou dans le forum Applications et environnements graphiques
    Réponses: 8
    Dernier message: 04/03/2004, 13h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo