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.