Directory Tree in Listbox einlesen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
HHick123
Beiträge: 21
Registriert: Mo 10. Nov 2014, 00:28

Directory Tree in Listbox einlesen

Beitrag von HHick123 »

Hallo Leute,

habe gerade etwas gekämpft, eine Directory-Struktur (mit wilden (polnischen?) UTF-8 Sonderzeichen in den Dateinamen) in eine Listbox einzulesen.
Dabei sollen die Verzeichnisse und Dateien in einer bestimmten Reihenfolge erscheinen (so dass, wenn sie mit einer Zahl anfangen, diese "normal" sortiert wird, (d.h. 1,2,3,4,..,10,11,... usw.)
Ausserdem möchte ich nur jeweils eine Zeile nach der anderen, um diese nacheinander zu verarbeiten (der Ordnerbaum kann ja sehr groß sein, was dann lange dauert) und so kann ich Application.ProcessMessages zwischendurch aufrufen, etc...

Es funktioniert jetzt ;-)

Hab' mir gedacht, ich poste es, vielleicht kann es ja mal jemand brauchen...
(zip ging nicht, weil die Sonderzeichen sich nicht packen liessen, musste daher 7zip nehmen)

Falls jemand eine Idee hat, wie man z.B. die Performance steiger kann bei gleichbleibender Funktionalität würde mich das natürlich auch sehr interessieren (oder vielleicht kann man es eleganter lösen....)

Hier das Interface:

Code: Alles auswählen

 
unit dirlister;
 
{$mode objfpc}{$H+}
 
interface
 uses
   Classes, SysUtils, lazutf8, LazFileUtils, windows;
 
 procedure DirLister_Init(path:string);
 function  DirLister_NextItem:string; //Call until it returns an empty string
 
 
implementation                       
 


Schönen Gruß, Helmut
Dateianhänge
DirLister_20160420.7z
(93.3 KiB) 86-mal heruntergeladen

HHick123
Beiträge: 21
Registriert: Mo 10. Nov 2014, 00:28

Re: Directory Tree in Listbox einlesen

Beitrag von HHick123 »

P.S.:

Bzgl. Performance: Wenn man die Funktionsaufrufe von "GetUNCName" herausnimmt, läuft die Auflistung blitzartig ab...

Da die aufgelisteten Ordner und Dateien ja eh' relativ zum gleichen initialisierten Pfad sind, hab' ich es nun für meinen Anwendungsfall so gemacht, dass ich die Aufrufe weggelassen habe, und dann den UNC-konvertierten Initialisierungspfad anschliessend an jeden Pfad vorne angehängt habe...

Antworten