Autor Beitrag
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: Sa 18.12.04 18:55 
Folgendes Problem: der Code findet keine Verzeichnisse, nur Dateien; obwohl er eigentlich genau umgekehrt funktionieren sollte :?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
  //* ProcessUserListFile [Subroutine of Initialize]
  //************************************************
  //* Creates userlist file newly if not found
  //* Parameters:
  //    None
  procedure ProcessUserListFile;
  var
    rec: TSearchRec;
    temp: TStringList; //Temporary storage for found users
  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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Sa 18.12.04 19:51 
Was steht denn in "Path" drin?
AXMD Threadstarter
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: Sa 18.12.04 19:53 
Sowas wie 'F:\Programmierprojekte\DSTP2\'.

AXMD
herzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 168

WINXP pro, SUSE Linux 9.0
D7 Pers.
BeitragVerfasst: 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 Threadstarter
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: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1144

Win XP
D5 Standard, D7 Pers, D2005 Pers
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 18.12.04 21:11 
Schreib statt *.* folgendes:
ausblenden Delphi-Quelltext
1:
 FindFirst(Path + '*.', faDirectory, rec);  //'*.' findet nur Ordner!					

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: 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 Threadstarter
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: Sa 18.12.04 21:17 
galagher hat folgendes geschrieben:
Schreib statt *.* folgendes:
ausblenden Delphi-Quelltext
1:
 FindFirst(Path + '*.', faDirectory, rec);  //'*.' findet nur Ordner!					


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: 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

ausblenden Delphi-Quelltext
1:
if (rec.Attr AND faDirectory) = faDirectory then					


zu schauen, ob das gefundene File ein Ordner ist.
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 20.12.04 21:32 
Bleibt aber die Frage, warum denn eigentlich
ausblenden 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 Threadstarter
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: Mo 20.12.04 21:47 
Wahrscheinlich, weil Ordner keinen "." im Namen haben ;)

AXMD
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Di 21.12.04 21:23 
Nun macht doch mal ein klitzekleines Testprogramm, wie hier:

Nur ein Form mit einem Memo und einem Button.

ausblenden 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)!