AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Verzeichnis auslesen ohne SysUtils
Thema durchsuchen
Ansicht
Themen-Optionen

Verzeichnis auslesen ohne SysUtils

Ein Thema von jokerfacehro · begonnen am 11. Mär 2010 · letzter Beitrag vom 11. Mär 2010
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#11

Re: Verzeichnis auslesen ohne SysUtils

  Alt 11. Mär 2010, 14:16
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.
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

Registriert seit: 13. Feb 2007
306 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Verzeichnis auslesen ohne SysUtils

  Alt 11. Mär 2010, 14:20
Zitat von rollstuhlfahrer:
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.
kommt genau das gleiche verhalten
"Never touch a running system administrator !"
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#13

Re: Verzeichnis auslesen ohne SysUtils

  Alt 11. Mär 2010, 14:30
Folgendes läuft bei mir ohne Fehler:
Delphi-Quellcode:
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.
Bernhard

PS: Delphi 7
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

Registriert seit: 13. Feb 2007
306 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: Verzeichnis auslesen ohne SysUtils

  Alt 11. Mär 2010, 14:36
ä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.
"Never touch a running system administrator !"
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#15

Re: Verzeichnis auslesen ohne SysUtils

  Alt 11. Mär 2010, 14:36
Zitat von jokerfacehro:
ähm was soll ich damit ?
Link anklicken und die Arbeitsweise von FindFirstFile verstehen... Dann kann man sich die ganzen benötigten Konstanten nämlich selbst zusammenschustern.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

Registriert seit: 13. Feb 2007
306 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: Verzeichnis auslesen ohne SysUtils

  Alt 11. Mär 2010, 14:39
@Daniel längst geschehen, Funktion mit FindFirstFile erstellt und den Post von vorhin editiert
"Never touch a running system administrator !"
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#17

Re: Verzeichnis auslesen ohne SysUtils

  Alt 11. Mär 2010, 14:51
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

Registriert seit: 13. Feb 2007
306 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: Verzeichnis auslesen ohne SysUtils

  Alt 11. Mär 2010, 14:53
"Never touch a running system administrator !"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz