Ich programmiere unter Linux und auch Windows. Häufig probiere ich (auf dem Heim-Laptop) unter Linux etwas aus, das dann unter Windows im Büro laufen soll. Jetzt bin ich auf etwas gestoßen, was ich mir nicht erklären kann und für das ich Hilfe brauche.
Ich will Daten verarbeiten, die in ASCII-Dateien gesammelt werden und die jeweils in eigenen Ordnern (zu sog. Loadcases) zusammengefasst werden. Um davon mehrere quasi als Batch zu verarbeiten kommen diese wiederum in einen übergeordnetten Data-Ordner.
Ich lese nun alle Ordner (d.h. zunächst die Namen) dieses Data-Folders ein /gespeichert in einer TStringList. Das geschieht mit der folgenden Routine:
Code: Alles auswählen
if SelectDirectoryDialog1.Execute then
begin
LoadcasesDirs := TStringList.Create;
try
MasterDir := IncludeTrailingPathDelimiter(SelectDirectoryDialog1.Files[0]);
BatchJobFrm.MasterDirEdt.Text := MasterDir;
LoadcasesDirs := FindAllDirectories(MasterDir,False,PathDelim);
Logger.LogMsg(llDebug,Format(' ----- %d loadcases/directories found',
[LoadcasesDirs.Count]));
BatchJobFrm.FillList(LoadcasesDirs);
finally
LoadcasesDirs.Free;
end;
end;
D.h. genau genommen funktioniert es unter Linux hervorragend. Beim Transfer auf meinen Windows-11-Rechner im Büro sehe ich in der StringList auf einmal die zusätzlichen Ordner/Einträge:
- $RECYCLE.BIN
- KRo-Projects (das ist der Basis-Ordner auf Laufwerk D:, in dem sich die Lazarus-Projekte befinden)
- System Volume Information
Die sind definitiv nicht im Data-Verzeichnis vorhanden (zumindest werden sie mir nicht im Explorer oder Total-Commander angezeigt).
Das Windows 11 ist ganz frisch; das gilt fpr den rechner als auch für mich (unter Windows 10 war mir das nicht aufgefallen).
Weiß hier jemand, woran dieses Verhalten liegt (eventuell am FindAllDirectories) und wie kann ich das am geschicktesten verhindern. Wie gesagt, unter Linux tut alles, wie es soll.
Dankbar für jede Anregung,
Photor