Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Filemanager Fehler - Lösung gefunden? (https://www.delphipraxis.net/148433-filemanager-fehler-loesung-gefunden.html)

DarkItachi 1. Mär 2010 21:28


Filemanager Fehler - Lösung gefunden?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallöchen?

Ich benutze folgende Function um Dateien aufzulisten: (Siehe ScreenShot)
Delphi-Quellcode:
  if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
  begin
    repeat
      if (SR.Attr <> faDirectory) then
      begin
        dview:= Form2.DirFileView.Items.Add;
        dview.ImageIndex:= 1;
        dview.Caption:= SR.Name;
      end;
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
ImageIndex (1) ist dieses Txt-Symbol.

Meine Frage:
Wie kann ich prüfen, ob SR.Attr faDirectory nicht enthält?
Wie ich vermute, sind diese falsch dargestellten Items(Ordner) mehrere Attribute enthalten.
Also faSysFile und faDirectory..

"SR.Attr <> faDirectory" ist ja schön und gut, aber was ist wenn "SR.Attr = faSysFile + faDirectory" ist?
Hoffentlich ist das verständlich! ^^

Ich bitte um Hilfe, thx

MfG

und gegebenenfalls "Gute Nacht" :wink:

Sir Rufo 1. Mär 2010 21:30

Re: Filemanager Fehler - Lösung gefunden?
 
Delphi-Quellcode:
if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
  begin
    repeat
      if (SR.Attr AND faDirectory <> faDirectory) then
      begin
        dview:= Form2.DirFileView.Items.Add;
        dview.ImageIndex:= 1;
        dview.Caption:= SR.Name;
      end;
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;

DarkItachi 2. Mär 2010 16:38

Re: Filemanager Fehler - Lösung gefunden?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Krass, funktioniert!
Verstanden und angewendet!^^

Da wäre ich niemals drauf gekommen!

EDIT:

Gut danke, dank diesen Code konnte ich auch noch den Ordner Code variieren!
Doch was jetzt?

Delphi-Quellcode:
procedure ListFileDir(Path: string);
var
  SR: TSearchRec;
  dview: TListItem;
begin

      if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then begin
   if SR.Name <> '.' then begin // Benutze ich, um die zwei Ordner wegzukriegen! (Screenshot)
    repeat
      if (sr.Attr and faDirectory = faDirectory) then
      begin
        dview:= Form2.DirFileView.Items.Add;
        dview.ImageIndex:= 0;
        dview.Caption:= SR.Name;
      end;

    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
 end;
end;
Jetzt listet er nur noch Ordner in einem Laufwerk Root aber in einem anderen Ordner wird kein Ordner erstellt!
Wenn ich
Delphi-Quellcode:
if SR.Name <> '.' then begin
wegnehme, funktionierts!

Ich versuche doch aber nur diese zwei Ordner wegzukriegen!

Was mache ich falsch? Thx again!

nat 2. Mär 2010 18:50

Re: Filemanager Fehler - Lösung gefunden?
 
ich habe jetzt nicht ganz kapiert was du für ein problem hast, aber
wenn du "." und ".." weg haben willst, dann sollte dein code so aussehen:
Delphi-Quellcode:
procedure ListFileDir(Path: string);
var
  SR: TSearchRec;
  dview: TListItem;
begin

      if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then begin
   //if SR.Name <> '.' then begin // Benutze ich, um die zwei Ordner wegzukriegen! (Screenshot) <--- falscher platz für die abfrage
    repeat
      if (SR.Name <> '.') and (SR.Name <> '..') then
        if (sr.Attr and faDirectory = faDirectory) then
        begin
          dview:= Form2.DirFileView.Items.Add;
          dview.ImageIndex:= 0;
          dview.Caption:= SR.Name;
        end;

    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;
end;
vielleicht ist das dann ja das, was du wolltest! ;)

Sir Rufo 2. Mär 2010 18:53

Re: Filemanager Fehler - Lösung gefunden?
 
Der Vergleich geht sogar noch kürzer:
Delphi-Quellcode:
if ( SR.Name[ 1 ] <> '.' ) then

nat 2. Mär 2010 18:57

Re: Filemanager Fehler - Lösung gefunden?
 
Zitat:

Zitat von Sir Rufo
Der Vergleich geht sogar noch kürzer:
Delphi-Quellcode:
if ( SR.Name[ 1 ] <> '.' ) then

genau diese variante benutze ich extra nicht.
was machst du denn, wenn ein ordner ".hallo" heißt?
ist ein gültiger name. deine routine überspringt ihn dann!

Sir Rufo 2. Mär 2010 18:58

Re: Filemanager Fehler - Lösung gefunden?
 
Zitat:

Zitat von nat
Zitat:

Zitat von Sir Rufo
Der Vergleich geht sogar noch kürzer:
Delphi-Quellcode:
if ( SR.Name[ 1 ] <> '.' ) then

genau diese variante benutze ich extra nicht.
was machst du denn, wenn ein ordner ".hallo" heißt?
ist ein gültiger name. deine routine überspringt ihn dann!

umbenennen und denjenigen, der den so benannt hat, steinigen :mrgreen:

himitsu 2. Mär 2010 19:00

Re: Filemanager Fehler - Lösung gefunden?
 
Delphi-Quellcode:
if (SR.Name <> '.') and (SR.Name <> '.') then begin
Es gibt zwar noch Wege dieses zu "optimieren", allerdings ist FindFirst/FindNext sowas von langsam, daß sich sowas nicht wirklich lohnt.

.htaccess :angel2:

DeddyH 2. Mär 2010 19:18

Re: Filemanager Fehler - Lösung gefunden?
 
Dann will ich auch noch meinen Senf dazugeben :mrgreen:
Delphi-Quellcode:
procedure ListFileDir(const Path: string; const DirFileView: TListView);
var
  SR: TSearchRec;
  dview: TListItem;
begin
  if FindFirst(IncludeTrailingPathDelimiter(Path) + '*.*', faAnyFile, SR) = 0 then
  begin
    repeat
      if (SR.Name <> '.') and (SR.Name <> '..') then
        if (sr.Attr and faDirectory = faDirectory) then
        begin
          dview:= DirFileView.Items.Add;
          dview.ImageIndex:= 0;
          dview.Caption:= SR.Name;
        end;
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;

himitsu 2. Mär 2010 19:33

Re: Filemanager Fehler - Lösung gefunden?
 
Zitat:

Zitat von DeddyH
Dann will ich auch noch meinen Senf dazugeben :mrgreen:

Delphi-Quellcode:
procedure ListFileDir(const Path: String; DirFileView: TCustomListView);
var
  SR: TSearchRec;
begin
  DirFileView.Items.BeginUpdate;
  try
    if FindFirst(IncludeTrailingPathDelimiter(Path) + '*.*', faAnyFile, SR) = 0 then
    begin
      repeat
        if (SR.Name <> '.') and (SR.Name <> '..')
            and (sr.Attr and faDirectory <> 0) then
          with TListView(DirFileView).Items.Add do
          begin
            ImageIndex := 0;
            Caption := SR.Name;
          end;
      until FindNext(SR) <> 0;
      FindClose(SR);
    end;
  finally
    DirFileView.Items.EndUpdate;
  end;
end;
Wobei '.' und '..' doch Ordner sind und da er doch wohl nur die Dateien haben möchte (oder hab ich das falscht verstanden?), kann man diese Ordner ignorieren und muß natürlich auf "Nicht-Verzeichnis" prüfen:
Delphi-Quellcode:
procedure ListFileDir(const Path: String; DirFileView: TCustomListView);
var
  SR: TSearchRec;
begin
  DirFileView.Items.BeginUpdate;
  try
    if FindFirst(IncludeTrailingPathDelimiter(Path) + '*.*', faAnyFile, SR) = 0 then
    begin
      repeat
        if sr.Attr and faDirectory = 0 then
          with TListView(DirFileView).Items.Add do
          begin
            ImageIndex := 0;
            Caption := SR.Name;
          end;
      until FindNext(SR) <> 0;
      FindClose(SR);
    end;
  finally
    DirFileView.Items.EndUpdate;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:48 Uhr.
Seite 1 von 2  1 2      

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