| Autor |
Beitrag |
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Sa 18.12.04 18:55
Folgendes Problem: der Code findet keine Verzeichnisse, nur Dateien; obwohl er eigentlich genau umgekehrt funktionieren sollte
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure ProcessUserListFile; var rec: TSearchRec; temp: TStringList; begin temp := TStringList.Create; rec.Size := SizeOf(TSearchRec); FindFirst(Path + '*.*', faDirectory, rec); repeat temp.Add(rec.Name); until FindNext(rec) <> 0; FindClose(rec); temp.SaveToFile(UserListFile); temp.Free; end; |
Zur Erläuterung: Pro User gibts ein Verzeichnis; gibt's noch keine Userliste, wird sie aufgrund der vorhandenen Verzeichnisse erstellt.
AXMD
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Sa 18.12.04 19:51
Was steht denn in "Path" drin?
|
|
AXMD 
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Sa 18.12.04 19:53
Sowas wie 'F:\Programmierprojekte\DSTP2\'.
AXMD
|
|
herzi
      
Beiträge: 168
WINXP pro, SUSE Linux 9.0
D7 Pers.
|
Verfasst: Sa 18.12.04 20:35
Also bei mir klappt der Code!
Zeigt mir schön aalle Verzeichnisse und Dateien auf..
Versuch mal ein anderes Verzeichnis
|
|
AXMD 
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Sa 18.12.04 20:43
| herzi hat folgendes geschrieben: | | Zeigt mir schön aalle Verzeichnisse und Dateien auf.. |
Ich will aber die Dateien raushaben! Ich will nur die Verzeichnisse! Und faDirectory sollte das doch machen, oder?
AXMD
|
|
StefanH
      
Beiträge: 1144
Win XP
D5 Standard, D7 Pers, D2005 Pers
|
Verfasst: Sa 18.12.04 21:02
| Delphihilfe: | ...
So bezeichnet beispielsweise 'c:\test\*.*' alle Dateien im Verzeichnis C:\TEST.
Der Parameter Attr gibt an, welche speziellen Dateien zusätzlich zu den normalen Dateien angezeigt werden. Die folgenden Konstanten können verwendet werden: |
-> du musst also überprüfen, ob das Verzeichnis existiert (FileCtrl, DirectoryExists).
MfG
_________________ "Als es noch keine Computer gab, war das Programmieren noch relativ einfach."(Edsger W. Dijkstra)
"Ich bin nicht von Sinnen, sondern ich rede wahre und vernünftige Worte." (Paulus)
|
|
galagher
      
Beiträge: 2562
Erhaltene Danke: 46
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Sa 18.12.04 21:11
Schreib statt *.* folgendes:
Delphi-Quelltext 1:
| FindFirst(Path + '*.', faDirectory, rec); |
Nachteil: Ordner, die eine Erweiterung haben, werden nicht aufgelistet...
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: Sa 18.12.04 21:12
| StefanH hat folgendes geschrieben: | | Delphihilfe: | ...
So bezeichnet beispielsweise 'c:\test\*.*' alle Dateien im Verzeichnis C:\TEST.
Der Parameter Attr gibt an, welche speziellen Dateien zusätzlich zu den normalen Dateien angezeigt werden. Die folgenden Konstanten können verwendet werden: |
-> du musst also überprüfen, ob das Verzeichnis existiert (FileCtrl, DirectoryExists).
MfG |
Prüfen, ja - am besten einfach, ob das gelieferte File ein Ordner ist. Über das von FindFirst gefüllte Record vom Typ TSearchRec (Element Attr --> siehe Online-Hilfe). In diesem Code also rec.Attr.
|
|
AXMD 
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Sa 18.12.04 21:17
| galagher hat folgendes geschrieben: | Schreib statt *.* folgendes:
Delphi-Quelltext 1:
| FindFirst(Path + '*.', faDirectory, rec); | |
Danke, super, funktioniert.
| Zitat: |
Nachteil: Ordner, die eine Erweiterung haben, werden nicht aufgelistet... |
Das is kein Problem. Dann darf der Username einfach keinen Punkt enthalten
AXMD
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: Sa 18.12.04 21:32
Ähm .. ich weiß nicht, ob sich die Postings jetzt überschnitten haben, aber das ist unsauber.
Sauber ist nachwievor, in der Suche die Ordner einzuschließen, beim Namen keine Einschränkung einzubauen und hinterher einfach mit
Delphi-Quelltext 1:
| if (rec.Attr AND faDirectory) = faDirectory then |
zu schauen, ob das gefundene File ein Ordner ist.
|
|
galagher
      
Beiträge: 2562
Erhaltene Danke: 46
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 20.12.04 21:32
Bleibt aber die Frage, warum denn eigentlich
Delphi-Quelltext 1:
| FindFirst(Path + '*.*', faDirectory, rec); |
keine Ordner findet? Ich meine, *.* ist eindeutig, ebenso faDirectory. Wenn faDirectory keine Ordner findet, wozu gibt's das dann? 
_________________ 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: Mo 20.12.04 21:47
Wahrscheinlich, weil Ordner keinen "." im Namen haben
AXMD
|
|
galagher
      
Beiträge: 2562
Erhaltene Danke: 46
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 21.12.04 18:02
| AXMD hat folgendes geschrieben: | Wahrscheinlich, weil Ordner keinen "." im Namen haben  |
Können sie aber durchaus!
Leider geht's nicht wirklich einfacher, denn zB. '*' klappt auch nicht.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: Di 21.12.04 21:23
Nun macht doch mal ein klitzekleines Testprogramm, wie hier:
Nur ein Form mit einem Memo und einem Button.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); var Ergebnis : TSearchRec; begin if FindFirst('C:\*.*',faDirectory,Ergebnis) = 0 then begin if (Ergebnis.Attr and faDirectory) >0 then Memo1.Lines.Add(Ergebnis.Name); while FindNext(Ergebnis) = 0 do begin if (Ergebnis.Attr and faDirectory) >0 then Memo1.Lines.Add(Ergebnis.Name); end; end; FindClose(Ergebnis); end; |
Klicken auf Button, gucken in Memo:
Egal, ob bei FindFirst 'C:\*.*' oder 'C:\*' drinsteht - er findet immer alle Ordner (mit und ohne Extension)!
|
|