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

Lazarus Pascal Discussion :

Ouverture simultanée de deux lecteurs de fichiers [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Ouverture simultanée de deux lecteurs de fichiers
    Bonjour à toutes et à tous,

    Avec la procédure suivante, j'ouvre deux lecteurs de fichiers simultanément. Le premier vient lire une liste de répertoires et le second, une liste de fichiers dans chacun des répertoires.

    Je suis sous Lazarus 2.0.6 sous Windows 10 et sous Ubuntu 20.04.1 LTS

    Sous Windows, ça fonctionne très bien. Sous Linux, ça ne fonctionne pas : Le lecteur de répertoires ouvre le premier répertoire puis le lecteur des fichiers lit les fichiers qui sont dans ce répertoire, mais lorsque cette lecture est finie, le lecteur de répertoire se ferme et ne lit pas les répertoires suivant.

    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
    var
      SRLon, SRLat: TSearchRec;
      i, OSMLa, OSMLo, Z: Integer;
      NomFch: String;
    begin
    {$I-}
      NomFch:= RepCartes+SepRep+Carte.Nom+Zoom;
      ChDir(RepCartes+SepRep+Carte.Nom+Zoom);
      SetLength(NomDalle, 0);
      OSMLaMin:= 100000;
      OSMLaMax:= -100000;
      OSMLoMin:= 100000;
      OSMLoMax:= -100000;
      if  IOresult = 0 then
      begin
        if FindFirst ('*', faDirectory, SRLon) = 0 then
        repeat // Recherche des longitudes
          if (SRLon.Name <> '.') and (SRLon.Name <> '..') then
            if (SRLon.Attr and faDirectory) = faDirectory then
            begin
              OSMLo:= StrToInt(SRLon.Name);
              if OSMLo < OSMLoMin then
                OSMLoMin:= OSMLo;
              if OSMLo > OSMLoMax then
                OSMLoMax:= OSMLo;
              ChDir(RepCartes+SepRep+Carte.Nom+Zoom+SepRep+SRLon.Name);
              if FindFirst ('*.jpg', faArchive, SRLat) = 0 then
              repeat // Recherche des latitudes dans les fichiers des longitudes
                if ((SRLat.Attr and faArchive) = faArchive) then
                begin
                  OSMLa:= StrToInt(ChangeFileExt(SRLat.Name, ''));
                  if OSMLa < OSMLaMin then
                    OSMLaMin:= OSMLa;
                  if OSMLa > OSMLaMax then
                    OSMLaMax:= OSMLa;
                  SetLength(NomDalle, Length(NomDalle) + 1);
                  NomDalle[High(NomDalle)].OSMLon:= OSMLo;
                  NomDalle[High(NomDalle)].OSMLat:= OSMLa;
                end;
              until FindNext(SRLat) <> 0;
              FindClose(SRLat);
            end;
        until FindNext(SRLon) <> 0;
        FindClose(SRLon);
      end;
    Est-ce un problème Linux ou bien ma procédure qui est mal ficelée ?

    Cordialement.

    Pierre.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Peut-être le CHDIR interne (latitudes) change-t-il le contexte pour la recherche externe (longitudes) sous Linux alors qu'il serait préservé sous Windows ?
    Si c'est ça, je ne vois pas d'autre moyen que de séparer les 2 boucles en mémorisant les noms des répertoires à traiter avant d'y chercher les dalles.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Peut-être le CHDIR interne (latitudes) change-t-il le contexte pour la recherche externe (longitudes) sous Linux alors qu'il serait préservé sous Windows ?
    Si c'est ça, je ne vois pas d'autre moyen que de séparer les 2 boucles en mémorisant les noms des répertoires à traiter avant d'y chercher les dalles.
    Tu as raison, c'est ce que j'ai fait ce matin et ça marche très bien.

    Par contre en relisant ce que tu disais à propos de ChDir, je me suis dit que si je rechangeais le répertoire courant pour celui des longitudes à la fin chaque exploration des latitudes dans mes deux boucles imbriquées ça pourrait marcher : et oui, ça marche.

    Pour ce faire, dans l'exposé de ma procédure dans le post précédent, après la ligne 41, je refais un ChDir pour retourner à celui des longitudes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
              ChDir(RepCartes+SepRep+Carte.Nom+Zoom); // Retour au répertoire des longitudes ; necessaire sous Linux
    Cordialement.

    Pierre.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    On pourrait tester en intégrant le chemin au filtre sur extension, pour voir si ça maintient le contexte, par curiosité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if FindFirst (RepCartes+SepRep+Carte.Nom+Zoom+SepRep+'*.*', faDirectory, SRLon) = 0 then
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    On pourrait tester en intégrant le chemin au filtre sur extension, pour voir si ça maintient le contexte, par curiosité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if FindFirst (RepCartes+SepRep+Carte.Nom+Zoom+SepRep+'*.*', faDirectory, SRLon) = 0 then
    Bonne curiosité ! En effet, ça marche ... sous Windows, mais sous Linux, il faut remplacer '*.*' par '*' qui à son tour fonctionne sous Windows.

    Pas simple tout ça.

    Cordialement.

    Pierre.

  6. #6
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Salut sinon, plus simplement, tu as FindAllFiles de l'unité FileUtils
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

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

Discussions similaires

  1. [XL-2010] Problème d'ouverture simultanée des fichiers Excel
    Par myredo dans le forum Excel
    Réponses: 2
    Dernier message: 28/01/2013, 08h53
  2. Réponses: 0
    Dernier message: 08/01/2013, 16h33
  3. [Adobe Reader X] Ouverture simultanée de nombreux fichiers PDF
    Par dodane dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 16/01/2012, 10h52
  4. Réponses: 1
    Dernier message: 06/05/2008, 09h37

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