![]() |
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:
ImageIndex (1) ist dieses Txt-Symbol.
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; 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: |
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; |
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:
Jetzt listet er nur noch Ordner in einem Laufwerk Root aber in einem anderen Ordner wird kein Ordner erstellt!
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; Wenn ich
Delphi-Quellcode:
wegnehme, funktionierts!
if SR.Name <> '.' then begin
Ich versuche doch aber nur diese zwei Ordner wegzukriegen! Was mache ich falsch? Thx again! |
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:
vielleicht ist das dann ja das, was du wolltest! ;)
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; |
Re: Filemanager Fehler - Lösung gefunden?
Der Vergleich geht sogar noch kürzer:
Delphi-Quellcode:
if ( SR.Name[ 1 ] <> '.' ) then
|
Re: Filemanager Fehler - Lösung gefunden?
Zitat:
was machst du denn, wenn ein ordner ".hallo" heißt? ist ein gültiger name. deine routine überspringt ihn dann! |
Re: Filemanager Fehler - Lösung gefunden?
Zitat:
|
Re: Filemanager Fehler - Lösung gefunden?
Delphi-Quellcode:
Es gibt zwar noch Wege dieses zu "optimieren", allerdings ist FindFirst/FindNext sowas von langsam, daß sich sowas nicht wirklich lohnt.
if (SR.Name <> '.') and (SR.Name <> '.') then begin
.htaccess :angel2: |
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; |
Re: Filemanager Fehler - Lösung gefunden?
Zitat:
Delphi-Quellcode:
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:
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;
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; |
Re: Filemanager Fehler - Lösung gefunden?
Ich hab mich jetzt nach dem Edit in #3 gerichtet, danach will er Ordner haben.
|
Re: Filemanager Fehler - Lösung gefunden?
Der Name "ListFileDir" ist aber auch mißverständlich ... Dir und/oder File?
|
Re: Filemanager Fehler - Lösung gefunden?
Das kann wohl nur der TE beantworten.
|
Re: Filemanager Fehler - Lösung gefunden?
Nein ^^
Ich will nur die Ordner auflisten... ListFileDir da kommt auch noch der Ordner Code hinter.. Den hab ich jetzt nur weggelassen, damit der Code nicht so riesig aussieht! 8-) Naja, auf jeden Fall danke für die Hilfe... Die ganzen Versuche, um die Ordner . und .. wegzulassen hat sich nicht gelohnt! Aber hier gibt es ja Experten! ^^ Ich probiere den Code mal... Thx EDIT: Funktioniert Super! Ich weiß wie ich verschiedene Icons machen könnte! Also zu mindestens wäre 'Case of' gut. Jedoch hab ich schon seit gestern das Problem, die letzten Zeichen herauszufinden. PosEx() kennt mein Delphi nicht, zu mindestens weiß ich nicht welche Unit ich einbinden muss...
Delphi-Quellcode:
Naja, vielleicht kennt jemand noch einen besseren Weg, um die Extension herauszubekommen.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Buttons, StdCtrls, ImgList, PngImageList; Also SR.Name hat leider nur einen Befehl um den Namen herauszufinden. Und mit *.exe usw hab ich auch schon rumprobiert... Was würdet ihr mir empfehlen? |
Re: Filemanager Fehler - Lösung gefunden?
so richtig hab ich schon wieder nicht kapiert was du von uns wissen willst, aber
ich versuche mal das zu beantworten was ich aus deinem post herauslesen konnte. Zitat:
Zitat:
|
Re: Filemanager Fehler - Lösung gefunden?
Dankeschön, muss ich mal probieren!
Zum Thema Unverständlichkeit.. Sorry.. Aber ist es nicht aus dem EDIT zu entnehmen? (Thema: Extension?) |
Re: Filemanager Fehler - Lösung gefunden?
Zitat:
Zitat:
daraus habe ich mir dann zusammengereimt, dass du wohl die file-ext extrahieren möchtest um abhängig davon verschiedene icons anzuzeigen. wirklich ersichtlich war das aber nicht. naja, ist ja auch nicht schlimm. habe dich ja letztendlich verstanden (denke ich zumindest) ;) |
Re: Filemanager Fehler - Lösung gefunden?
ja sehr gut sogar..
Naja, vielleicht kennt jemand noch einen besseren Weg, um die Extension herauszubekommen. hat bestimmt alles durcheinander gebracht oder? Ich hätte gleich von Ext. reden sollen! ^^ OFFTOPIC: Gleich dein 200. Beitrag! :firejump: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 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