![]() |
Verzeichnis auslesen ohne SysUtils
Hallo,
ich programmiere mit Delphi 7 Enterprise. ich brauche eine funktion, die mir ein verzeichnis ausliest. Da ich nonVCL programmiere und die SysUtils gern vermeiden möchte, suche ich nach einer alternative. ich hab versucht die benötigten funktionen direkt aus der SysUtils zu übernehmen,allerdings spinnt seitdem mein debugger. zeigt nur noch unsinn naja. da ich zu diesem thema bisher nichts gefunden habe, ist hier mein beitrag. gibt es noch andere wege, ein verzeichnis unter windows auszulesen ? |
Re: Verzeichnis auslesen ohne SysUtils
hab grad was gefunden
Delphi-Quellcode:
allerdings brauch ich dafür ne listbox :/
procedure TForm1.GetDirectoryContent(const p_sRoot : string;const p_slResult : TStrings);
var lbWork : TListBox; begin // Filectrl einbinden für DirectoryExists if not DirectoryExists(p_sRoot) then begin exit; end; lbWork := TListBox.CreateParented(self.Handle); try SendMessage(lbWork.Handle,LB_DIR,DDL_DIRECTORY,lParam(PChar(p_sRoot+StringOfChar('\',ord(AnsiLastChar(p_sRoot) <> '\'))+'*.*'))); lbWork.Items.Delete(lbWork.Items.IndexOf('[..]')); p_slResult.Clear; p_slResult.AddStrings(lbWork.Items); finally FreeAndNil(lbWork); end; end; kann ich der message auch nen WindowHandle zuweisen und das dann abfangen ? |
Re: Verzeichnis auslesen ohne SysUtils
Hallo,
geh mal zu Msdn und fange bei CreateFile an zu suchen (das wird auch zum Öffnen von Dateien und Verzeichnissen benutzt). Heiko |
Re: Verzeichnis auslesen ohne SysUtils
Zitat:
Bernhard |
Re: Verzeichnis auslesen ohne SysUtils
|
Re: Verzeichnis auslesen ohne SysUtils
@rollstuhlfahrer
genau das hab ich gemacht, allerdings gibt'S da einige platformabhängige konstanten und so weiter, da meckert er nacher rum |
Re: Verzeichnis auslesen ohne SysUtils
Zitat:
Edit: hab mich verlesen, hab erst nur FindFirst gelesen ^^ FindFirstFile ist eine gute Alternative zu FindFirst und basiert auf der Windows Unit |
Re: Verzeichnis auslesen ohne SysUtils
Zitat:
|
Re: Verzeichnis auslesen ohne SysUtils
übrigens läuft nonVCL eh nicht auf anderen Host-Systemen als Windows, da ja direkt auf die Win-API zurückgegriffen wird. Ich hab dann bei solchen Sachen entweder die Warnungen deaktiviert oder den platform-Operator entfernt.
Bernhard |
Re: Verzeichnis auslesen ohne SysUtils
ok, so sieht meine unit aus
Delphi-Quellcode:
das komische ist, er zeigt da nen fehler an unzwar: Missing parameter type;
unit dir;
interface uses windows; type LongRec = packed record case Integer of 0: (Lo, Hi: Word); 1: (Words: array [0..1] of Word); 2: (Bytes: array [0..3] of Byte); end; type TFileName = string; type TSearchRec = record Time: Integer; Size: Integer; Attr: Integer; Name: TFileName; ExcludeAttr: Integer; FindHandle: THandle; FindData: TWin32FindData; end; const faReadOnly = $00000001 platform; faHidden = $00000002 platform; // hier fehler faSysFile = $00000004 platform; faVolumeID = $00000008 platform; faDirectory = $00000010; faArchive = $00000020 platform; faSymLink = $00000040 platform; faAnyFile = $0000003F; function FindFirst(const Path: string; Attr: Integer; forward; function FindNext(var F: TSearchRec): Integer; forward; procedure FindClose(var F: TSearchRec); forward; function FindMatchingFile(var F: TSearchRec): Integer; forward; implementation function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer; const faSpecial = faHidden or faSysFile or faVolumeID or faDirectory; begin F.ExcludeAttr := not Attr and faSpecial; F.FindHandle := FindFirstFile(PChar(Path), F.FindData); if F.FindHandle <> INVALID_HANDLE_VALUE then begin Result := FindMatchingFile(F); if Result <> 0 then FindClose(F); end else Result := GetLastError; end; function FindNext(var F: TSearchRec): Integer; begin if FindNextFile(F.FindHandle, F.FindData) then Result := FindMatchingFile(F) else Result := GetLastError; end; procedure FindClose(var F: TSearchRec); begin {$IFDEF MSWINDOWS} if F.FindHandle <> INVALID_HANDLE_VALUE then begin Windows.FindClose(F.FindHandle); F.FindHandle := INVALID_HANDLE_VALUE; end; {$ENDIF} {$IFDEF LINUX} if F.FindHandle <> nil then begin closedir(F.FindHandle); F.FindHandle := nil; end; {$ENDIF} end; function FindMatchingFile(var F: TSearchRec): Integer; var LocalFileTime: TFileTime; begin with F do begin while FindData.dwFileAttributes and ExcludeAttr <> 0 do if not FindNextFile(FindHandle, FindData) then begin Result := GetLastError; Exit; end; FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime); FileTimeToDosDateTime(LocalFileTime, LongRec(Time).Hi, LongRec(Time).Lo); Size := FindData.nFileSizeLow; Attr := FindData.dwFileAttributes; Name := FindData.cFileName; end; Result := 0; end; end. und für die nächste zeile folgenden fehler: Identifier expected but "FUNCTION" found. das ergibt überhaupt keinen sinn :gruebel: Edit: setze ich die Konstanten direkt unter uses, tritt der fehler beim TsearchRec auf |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz