Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 08.02.05 21:30 
Hallo Leute!
Ich hab meinen File-Finder praktisch fertig, allerdings merke ich gerade, dass er keine Dateien findet, die keine Dateinamenerweiterung haben. Hier mal der Code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
var
  Attr, k: Integer;
  Search: TSearchRec;
  D, FSize: String;
  F: Cardinal;
begin
  Attr := faArchive + faReadOnly + faHidden + faSysFile;

  Path := IncludeTrailingBackSlash(Path);

  with TStringList.Create do
  try
    CommaText := Mask;  //Mask kann zB *.* sein oder *.* *.ini etc. * wird aber als *.* interpretiert

    for k := 0 to Count - 1 do
     if FindFirst(Path + Strings[k], Attr, Search) = 0 then
      repeat
        {usw.}

Ich habe zu Testzwecken eine Datei ABC erstellt - wird weder mit ??? noch mit * noch mit abc gefunden. Wie kann ich FindFirst/FindNext dazu bringen, auch solche Dateien zu finden?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Di 08.02.05 21:38 
Das liegt an Windows; hatte das Problem auch mal. FindFirst/Next findet keine Dateien, die keine Endung haben

AXMD
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: Di 08.02.05 21:42 
Ich kann deinen Fehler nicht reproduzieren (Delphi 5). Weder unter Windows 95 mit FAT16 noch unter Windows XP mit NTFS.
Welche Delphi und welche Windows Version nutzt du? Und zeige mal einen vollständiges Beispiel wo es nicht mit geht.

_________________
Ciao, Sprint.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 08.02.05 22:09 
Sprint hat folgendes geschrieben:
Welche Delphi und welche Windows Version nutzt du? Und zeige mal einen vollständiges Beispiel wo es nicht mit geht.

Delphi 6, WinMe. Wenn ich zum Testen
ausblenden Delphi-Quelltext
1:
if FindFirst(Path + '???', Attr, Search) = 0 then Caption := Search.Name;					

angebe, funktioniert es - Caption ist nun der Dateiname ABC.

Naja, hier mal die ganze Prozedur. Sie stammt nicht zur Gänze von mir (hab's aber verabsäumt, zu notieren, von wem :oops: ):
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
procedure TForm1.FindFile(Path, Mask: String);
var
  Attr, k: Integer;
  Search: TSearchRec;
  D, FSize: String;
  F: Cardinal;
begin
  Attr := faArchive + faReadOnly + faHidden + faSysFile;

  Path := IncludeTrailingBackSlash(Path);

  with TStringList.Create do
  try
    CommaText := Mask;

    for k := 0 to Count - 1 do
     if FindFirst(Path + Strings[k], Attr, Search) = 0 then
      repeat
       Application.ProcessMessages;
       if (Application.Tag = -2or (Found = -1then break;

       Label1.Caption := Path+Search.Name;
       Label1.Refresh;

       D := GetFileDate(Path+Search.Name);
       F := Search.Size;

       if (StrToDate(D) < VorFDate) and (StrToDate(D) > NachFDate) and
        (F < MinFSize) and (F >= MaxFSize) then
        if Is_LabeledEdit2Text_InFile(Path+Search.Name) then
         if not (AnsiLowerCase(ExtractFileExt(Search.Name)) = Ext) then
       begin
        Inc(FileCount);
        if FileCount > 1 then StringGrid1.RowCount := StringGrid1.RowCount+1;
        StringGrid1.Cells[0,FileCount] := Search.Name;
        StringGrid1.Cells[1,FileCount] := Path;

        FSize := SysUtils.FormatFloat('#,#', F);
        if FSize = '' then FSize := '0';
        while Length(FSize) < 12 do FSize := ' '+FSize;
        StringGrid1.Cells[2, FileCount] := FSize;
        StringGrid1.Cells[3, FileCount] := GetFileTime(Path+Search.Name)+' '+D;
        StringGrid1.Cells[4,FileCount] := FGetFileAttr(Path+Search.Name);
        if CheckBox2.Checked then
         if not (LabeledEdit2.Text = ''then
          StringGrid1.Cells[5,FileCount] := IntToStr(Found);
        Label3.Caption := IntToStr(FileCount-1)+' Datei(en)';
        Label3.Refresh;
       end;

      until FindNext(Search) <> 0;

   SysUtils.FindClose(Search);

  finally Free end;

  if not RadioButton3.Checked then
   {Auch Ordner mit Attribut S H finden: faSysFile+faHidden}
  if FindFirst(Path + '*.*', faDirectory+faSysFile+faHidden, Search) = 0 then
  begin
   repeat
    {Hier nicht nötig:
     Application.ProcessMessages;
     if Application.Tag = -2 then break;}


    if ((Search.Attr and faDirectory) = faDirectory) and
      (Search.Name[1] <> '.'then
      FindFile(Path + Search.Name, Mask);
   until FindNext(Search) <> 0;

   SysUtils.FindClose(Search);
  end;
end;

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: Di 08.02.05 22:21 
Ich meinte eigentlich ein Beispiel und nicht deine ganze Funktion. Obwohl da wohl der Fehler liegen wird.

_________________
Ciao, Sprint.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 08.02.05 22:35 
Sprint hat folgendes geschrieben:
Ich meinte eigentlich ein Beispiel und nicht deine ganze Funktion. Obwohl da wohl der Fehler liegen wird.

Na ja, wenn der gesuchte Dateityp * ist oder ? oder ??? oder . oder ... dann geht's nicht. :? *.* geht, *nit*.pas geht, ebenso ?????.dc*, eben alles mit Dateinamenerweiterung.

Ich habe ein LabeledEdit für die Suchmaske, wobei auch mehrere eingegeben werden können. Nur eben Dateien ohne Erweiterung findet mein Prog nicht, egal, was ich eingebe.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 08.02.05 22:43 
Bin dem Fehler auf der Spur, so wie's aussieht! Muss mir nur noch was einfallen lassen, wie ich's hinkriege! Danke erstmal!
@Sprint: Der Fehler liegt da drin!

Ok, hier korrekt...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if Is_LabeledEdit2Text_InFile(Path+Search.Name) then
 if not (AnsiLowerCase(ExtractFileExt(Search.Name)) = Ext) or
  (AnsiLowerCase(ExtractFileExt(Search.Name)) = ''then
{...}

...statt wie ursprünglich
ausblenden Delphi-Quelltext
1:
2:
3:
if Is_LabeledEdit2Text_InFile(Path+Search.Name) then
 if not (AnsiLowerCase(ExtractFileExt(Search.Name)) = Ext) then
{...}

Sorry, dass ich euch wegen sowas Banalem aufgehalten habe! Aber jetzt funktioniert es! :lol:

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: Di 08.02.05 23:01 
galagher hat folgendes geschrieben:
@Sprint: Der Fehler liegt da drin!

Tja, war irgendwie klar das der Fehler in deiner Funktion liegt und nicht an FindFirst & Co. :)

_________________
Ciao, Sprint.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mi 09.02.05 18:17 
Sprint hat folgendes geschrieben:
Tja, war irgendwie klar das der Fehler in deiner Funktion liegt und nicht an FindFirst & Co. :)

:schmoll:

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: Mi 09.02.05 22:53 
galagher hat folgendes geschrieben:
:schmoll:

Das war nicht böse gemeint. :wink:

_________________
Ciao, Sprint.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Do 10.02.05 19:53 
Sprint hat folgendes geschrieben:
Das war nicht böse gemeint. :wink:

War auch nur ein Scherz! Danke jedenfalls!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!