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 :

Questions sur la navigation dans les répertoires


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Par défaut Questions sur la navigation dans les répertoires
    Bonjour à tous,

    J'ai une question concerant l'éxécution d'un projet en cours.

    En fait, il s'agit d'un outil capable de trouver puis de supprimer certaines fichiers/dossiers.

    Voici mes questions:

    -Comment faire, pour se déplacer dans les repertoires?(ex sous Dos cd %systemdrive%)

    - Comment utiliser la variable HomeDrive, ou SytemDrive?

    J'aurais bien sur une ou deux autres questions, mais je préfere m'en tenir là pour le moment.

    Merci pour les éventuelles réponses qui peuvent être apportées.

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 117
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 117
    Par défaut
    Yep !
    Citation Envoyé par belle5656 Voir le message
    -Comment faire, pour se déplacer dans les repertoires?(ex sous Dos cd %systemdrive%)
    ChDir

    Citation Envoyé par belle5656 Voir le message
    - Comment utiliser la variable HomeDrive, ou SytemDrive?
    Avec ce lien

    Mes 2 cts,
    --
    jp

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Par défaut
    Yep merci!

    Pour ChDir, j'avais bien vu, mais j'ai du mal m'exprimer, désolé..

    En fait, si je rentre en début de code

    Chdir(SystemDrive);

    Rien ne se passe...

    PAr contre, effectivement

    ChDir(C:\);

    Là c'est ok.

    Il faut donc, si j'ai bien saisi le truc, déclarer a quoi correspond SystemDrive c'est bien cela?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var
     
    SystemDrive : ???;

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Salut,

    Tu peux faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    ShowMessage(GetEnvironmentVariable('HOMEDRIVE'));
    end;
    Dans mon cas, ca me retourne C:

    Sinon, tu peux jetter un oeil là dessus :

    http://delphi.developpez.com/faq/?pa...terapplication

    En espérant t'aider
    A+

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Par défaut
    salut!

    Ok merci pour ta réponse, je regarde cela, et te donne une réponse demain.

    Merci bonne nuit!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Par défaut
    Salut à tous,

    Bon, je viens aux nouvelles, car cela ne fonctionne pas..Oui je dois mal m'y prendre.

    Voici ce que j'ai saisi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    chdir(GetEnvironmentVariable('HOMEDRIVE'));
     
     if FileExists(***.***) then
      Memo1.Text:=******!';
        Writeln(Rapport, ***.***!');
    C'est faux non?

    J'avoue avoir un peu de mal a saisir là...
    J'ai pourtant des tutos, un ouvrage mais bon...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Par défaut
    Bonjour à tous!

    Je fais remonter ce sujet, car j'ai un petit soucis avec le temps de recherche..
    J'ai essayer de supprimer certains éléments du code, mais cela prends pas mal de temps, 5 minutes a peu près, pour une trentaine de fichier + une trentaine de dossier.. c'est bien sur très long.

    Pour plus de précision, quand apr exemple, je cherche le Dossier A, il est accompagné, le plus souvent, apr le Fichier B.
    J'ai donc essayer de faire ce qui suit (je grossis le code pour une idée de la chose que j'ai faite)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    If FileExists(Dossier B) then
     begin
    DeleteFile(Fichier A)
    //Ecriture
    end
    else
    If FileExists(Dossier C) then begin
    DeleteFile(Fichier D)
    //Ecriture
    end (......)



    Ceci fonctionne pas, pas de soucis. Mais c'est toujours, trop long au niveau de la recherche.

    Y a t'il une autre solution pour accélérer les recherches?

    Merci a tous ceux qui me liront et..Répondront..

  8. #8
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Salut belle5656,

    Tout d'abord, pour tester l'existence d'un dossier, il faut utiliser DirectoryExists() (Pour plus d'info, F1 ).

    Pour ce qui est de ton code, si tu veux gagner en temps, ca se base sur des critères tel que l'endroit où le fichier risque de se trouver.

    Par exemple, si tu es sur que le fichier sera dans le Dossier A et seulement dans celui ci, il te suffit te tester la présence du fichier directement dans ce dossier en prenant soin avant, de tester que ce dernier existe. Et encore, on n'est pas obligé de tester l'existence du dossier avant car si DeleteFile renvoie false, c'est que le fichier n'existe pas ...

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if DirectoryExists('C:\Temp') then
      DeleteFile('C:\Temp\toto.txt');
    Ceci suppose t-il que tu ne scannera plus le disque dur en son intégralité mais juste en sélectionnant des dossiers particuliers ?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Par défaut
    salut Ero-sennin,

    Désolé pour l"erreur de copiage du code, j'utilise bien DirectoryExists

    Si tu veux:

    Si, par exemple, le Fichier A est présent, le Dossier B peut être ailleurs, et vice-versa.
    Donc, il faudra quand même que je scrute tout le disque dur pour cela.

  10. #10
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Ok

    Donc, si je te suis, tu sais déjà les dossiers qui contiendra les fameux fichiers à supprimer...

    Si c'est le cas, il faudrait modifier le code de Cl@udius pour que l'on ne scanne que les dossiers et non les fichiers...
    Une fois le dossier localisé, on fait un DeleteFile(MonFichier) et selon ce que la fonction renvoie, on sera en mesure de dire si le fichier étant présent ou non.

    Faudrait que je trouve un peu de temps pour regarder, or, je ne suis pas sur qu'aujourd'hui je pourrai jetter un oeil!

    Si j'y parviens, je posterai le code

  11. #11
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    J'ai vite fait regardé pour le test, mais je ne sais pas si ca fonctionne correctement ... (logiquement oui).

    C'est une reprise de code de Cl@udius modifié de façon à ce que l'on ne scrute que les dossiers qui sont sensé contenir le fichier à supprimer.

    Je met le code ci dessus en ne garantissant pas que celà soit plus performant et fonctionnel à 100%. Je laisserai quelqu'un (Cl@udius par exemple) valider la chose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
      const
      // Fichiers à rechercher
      Files: array[0..2] of string = ('tata.txt', 'toto.pas', 'titi.zps');
     
    implementation
     
    uses StrUtils;
     
    {$R *.dfm}
     
    procedure ScruterDossiers(Folder: string);
     
      // Chercher si les fichers (Tableau Files) existe dans le dossier
      procedure SearchInFolder;
      var
        I: Integer;
      begin
        for I := Low(Files) to High(Files) do
          if FileExists(Folder + Files[i]) then
            Form1.Memo1.Lines.Add(Folder + Files[i] + ': trouvé !');
      end;
     
    var
      S: TSearchRec;
      MesDossiers:array[0..2] of string;
    begin
      MesDossiers[0]:='temp';
      MesDossiers[1]:='dossierA';
      MesDossiers[2]:='DossierC';
      Folder := IncludeTrailingPathDelimiter(Folder);
     
      // Rechercher dans le dossier
     
     
      // Isoler et traiter les sous-dossiers
      if FindFirst(Folder + '*.*', faDirectory, S) = 0 then
      begin
        repeat
          // Ignorer les . et ..
          if (S.Name <> '.') and (s.Name <> '..') then
          begin
            if ((S.Attr and faDirectory) = faDirectory)  then
              // Test si on est dans un dossier que l'on veut scruté
              if AnsiMatchText(S.Name,['toto','temp']) then
              begin
                Folder:=IncludeTrailingPathDelimiter(Folder+S.FindData.cFileName);
                SearchInFolder;
              end;
              // Si sous-dossier: appel récursif
              ScruterDossiers(Folder + S.FindData.cFileName);
          end;
        // Recherche fichier du suivant
        until FindNext(S) <> 0;
        FindClose(S);
      end;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    ScruterDossiers('C:\');
    end;
    En espérant que ça soit bon
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question sur la recherche dans les chaînes de caractères
    Par Garamante dans le forum VBScript
    Réponses: 5
    Dernier message: 15/12/2008, 17h33
  2. question idiote sur terme utilisé dans les offres
    Par coyott dans le forum Emploi
    Réponses: 4
    Dernier message: 24/08/2005, 17h16
  3. Association navigables dans les deux sens
    Par DarkNagash dans le forum Diagrammes de Classes
    Réponses: 4
    Dernier message: 13/07/2005, 15h11
  4. Navigation dans les objets
    Par hunter dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/05/2005, 11h31
  5. Informations sur un exe (dans les propriétés windows)
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 06/07/2004, 18h20

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