![]() |
Re: Verzeichnis auslesen ohne SysUtils
Punkt 1: mach mal die ganzen Platform weg und schreib dir dafür nen Kommentar irgendwo hin, dass diese Unit NUR unter Windows funktioniert. Dann nimmst du die ganzen {$IFDEF LINUX}-Blöcke und schmeißt diese auch raus. Du arbeitest ja mit Windows.
So, nach dieser Entschlankungskur sollte es einfacher sein, den Fehler zu finden. |
Re: Verzeichnis auslesen ohne SysUtils
Zitat:
|
Re: Verzeichnis auslesen ohne SysUtils
Folgendes läuft bei mir ohne Fehler:
Delphi-Quellcode:
Bernhard
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; faHidden = $00000002; faSysFile = $00000004; faVolumeID = $00000008; faDirectory = $00000010; faArchive = $00000020; faSymLink = $00000040; faAnyFile = $0000003F; function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): 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. PS: Delphi 7 |
Re: Verzeichnis auslesen ohne SysUtils
ähm ich hab deinen qulltext bei mir reinkopiert und der funzt einwandfrei ^^
hab kurz drüber geschaut, aber keinen utnerschied erkennen können, hmm naja es funzt und das solls auch ^^ ich hab mir auch ma hoikas lösung angeschaut, die ist auch nicht schlecht FindFirstFile nutzt ne funktion aus der Windows Unit. |
Re: Verzeichnis auslesen ohne SysUtils
Zitat:
|
Re: Verzeichnis auslesen ohne SysUtils
@Daniel längst geschehen, Funktion mit FindFirstFile erstellt und den Post von vorhin editiert :P
|
Re: Verzeichnis auslesen ohne SysUtils
PS: in Delphi 7 Enterprise sind die Delphi-QuellCodes enthalten
- in der Sysutils nachsehn was FindFirst macht und schon wäre man von selber bei FindFirstFile gelandet. |
Re: Verzeichnis auslesen ohne SysUtils
:oops:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:30 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