Autor |
Beitrag |
galagher
Beiträge: 2510
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: 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:
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; for k := 0 to Count - 1 do if FindFirst(Path + Strings[k], Attr, Search) = 0 then repeat |
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
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: 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
Beiträge: 849
|
Verfasst: 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
Beiträge: 2510
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: 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
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 ):
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 = -2) or (Found = -1) then 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 if FindFirst(Path + '*.*', faDirectory+faSysFile+faHidden, Search) = 0 then begin repeat
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
Beiträge: 849
|
Verfasst: 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
Beiträge: 2510
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: 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
Beiträge: 2510
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: 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...
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
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!
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Sprint
Beiträge: 849
|
Verfasst: 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
Beiträge: 2510
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: 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. |
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Sprint
Beiträge: 849
|
Verfasst: Mi 09.02.05 22:53
galagher hat folgendes geschrieben: | |
Das war nicht böse gemeint.
_________________ Ciao, Sprint.
|
|
galagher
Beiträge: 2510
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Do 10.02.05 19:53
Sprint hat folgendes geschrieben: | Das war nicht böse gemeint. |
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!
|
|
|