Autor Beitrag
salmanasar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: So 10.10.04 22:30 
gibts ne funktion mit der ich rausfinde, wieviele Dateien sich in einem ordner befinden?

danke
Salmanasar
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: So 10.10.04 22:39 
salmanasar hat folgendes geschrieben:
gibts ne funktion mit der ich rausfinde, wieviele Dateien sich in einem ordner befinden?

Jup, FindFirst, FindNext und FindClose. 8) Vielleicht gibts auch 'ne API-Funktion dafür, kann mich aber an keine erinnern ... :gruebel:

Gruß,
Jörg

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
salmanasar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: So 10.10.04 22:44 
das hab ich auch schon mal gelesen. kannste das mal in nen code einbauen, hab leider keine ahnung, wie ich die benutzen kann um dateien zu zählen.

vielleicht haste ja irgendwo noch einen code-fetzel rumliegen
danke
salmanasar
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: So 10.10.04 22:49 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
  sr : TSearchRec;
  fa, a : Integer;
begin
  fa:=faAnyFile-faDirectory-faVolumeID;
  a:=0;
  if FindFirst('*',fa,sr) = 0 then
  begin
    repeat
      Inc(a);
    until FindNext(sr) <> 0;
    FindClose(sr);
  end;

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
it0101
Hält's aus hier
Beiträge: 15

W2k
D6 Enterprise
BeitragVerfasst: Do 14.10.04 21:11 
Ich verwende schon seit ewigkeiten diese variante, hab aber jetzt erstmals probleme damit...
wenn ich mit faAnyFile suche, dann gibt es bestimmte dateien die nicht gefunden werden (in meinem fall eine datei mit der kennung "Systemdatei", selbst die MS-DOS Konsole zeigt die nich an...

aber ich hab mit meinem admin-login zugriff auf die datei!

Wie komm ich an das file per findfirst ran?
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Do 14.10.04 21:26 
Such mal explizit nach Systemdateien. Wird die dann angezeigt?

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
it0101
Hält's aus hier
Beiträge: 15

W2k
D6 Enterprise
BeitragVerfasst: Do 14.10.04 21:57 
nein leider nicht, fasysfile bringt auch nix
it0101
Hält's aus hier
Beiträge: 15

W2k
D6 Enterprise
BeitragVerfasst: Do 14.10.04 22:08 
so damit ihr nich denkt ich bin zu doof zum proggen, hier mal mein provisorischer quelltext :) (findet alles ausser die dateien in dem verzeichnis)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button3Click(Sender: TObject);
var sr:Tsearchrec;
begin
     if FindFirst('C:\Dokumente und Einstellungen\User\Anwendungsdaten\Microsoft\cryptneturlcache\content\*.*', faanyfile, sr) = 0 then begin
      repeat
        if (faanyfile and Sr.Attr = fasysfile ) then
        begin
             listbox1.Items.add(sr.name);
        end;
      until FindNext(sr) <> 0;
      FindClose(sr);
     end;
end;


ich hab das original verzeichnis einfach mal drin gelassen... könnt ja mal schauen was bei euch in dem verzeichnis ist

PS: benutze "W2K SP4"


mfg toby

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Do 14.10.04 22:11 
Mit explizit meinte ich:

ausblenden Delphi-Quelltext
1:
 if FindFirst('...', fasysfile, sr) = 0 then					


K.A., obs einen Unterschied macht, aber probieren geht über ...

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
it0101
Hält's aus hier
Beiträge: 15

W2k
D6 Enterprise
BeitragVerfasst: Do 14.10.04 22:23 
... studieren


habs grad getestet hat aber nix gebracht
it0101
Hält's aus hier
Beiträge: 15

W2k
D6 Enterprise
BeitragVerfasst: Do 14.10.04 22:33 
Hmmm ich hab mir grad ma die datei angeschaut...

Sie besitzt keine dateiendung, (lasse im Explorer alle endungen anzeigen)
wird aber vom explorer als "Systemdatei" bezeichnet...

hmm sehr merkwürdig, vielleicht sollte ich in dem lieber nen Systemexperten zu rate ziehen :)
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Do 14.10.04 22:35 
Aha. :idea: Keine Endung! Suche mal nach '*' anstatt nach '*.*'!

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
it0101
Hält's aus hier
Beiträge: 15

W2k
D6 Enterprise
BeitragVerfasst: Do 14.10.04 23:06 
Ist ne gute idee bringt aber nix, habs mit ../* und mit ../*. versucht aber funzt nich...
hab zum test mal ne normale datei ins verzeichnis kopiert und die wird problemlos gefunden...
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 15.10.04 10:26 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button3Click(Sender: TObject);
var sr:Tsearchrec;
begin
     if FindFirst('C:\Dokumente und Einstellungen\User\Anwendungsdaten\Microsoft\cryptneturlcache\content\*.*', faanyfile, sr) = 0 then begin
      repeat
// FALSCH !!!!!!!!!
        if (faanyfile and Sr.Attr = fasysfile ) then
// RICHTIG:
        if (Sr.Attr AND fasysfile > 0then
        begin
             listbox1.Items.add(sr.name);
        end;
      until FindNext(sr) <> 0;
      FindClose(sr);
     end;
end;


Grund:
Bei deiner Bedingungsabfrage würde dir eine Datei, die auch noch versteckt, wäre nicht angezeigt werden!
it0101
Hält's aus hier
Beiträge: 15

W2k
D6 Enterprise
BeitragVerfasst: Fr 15.10.04 14:50 
Ja ich habs heute früh noch hinbekommen. Nur mit faAnyFile...

Denn rein theoretisch beinhaltet ja faAnyFile schon alle Dateiarten, auch versteckte und Systemdateien.
jackie
Hält's aus hier
Beiträge: 9

Win XP
D5 Prof
BeitragVerfasst: So 06.02.05 13:26 
Hi Leute,

bin noch blutiger Anfänger. Aber das wird schon noch. Ich habe mir den Code gerade mal angesehn. Ich möchte nun aber die tatsächliche Anzahl der Dateien in einem Ordner ausgegeben haben.

Die Ausgabe ist relativ egal. Wichtig wäre nur die Anzahl.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Button1Click(Sender: TObject);
var sr:Tsearchrec;
begin
     if FindFirst('D:\Programmierung\Delphi\Progs\Bilderverwaltung\Bilder\*', faanyfile, sr) = 0 then begin
      repeat
      //  if (faanyfile and Sr.Attr = fasysfile ) then
       if (Sr.Attr  > 0then
        begin
             listbox1.Items.add(sr.name);
        end;
      until FindNext(sr) <> 0;
      FindClose(sr);
     end;
end;


Wie stelle ich das am besten an. Hintergrund ist folgender. Ich habe einen Ordner der soll max. 1024 Dateien beinhalten. Wenn man diesem Ordner eine weitere Datei hinzufügt, dann soll ein neuer Ordner erstellt werden und diese Datei soll dann im neuen Ordne eingefügt werden.

Um diese Funktion zu erstellen, dachte ich wäre es sinnvoll wenn man mit der Anzahl der Dateien in einem Ordner arbeitet.

Bsp. \Grafik\000001\000001-001024.jpg wenn jetzt 001025.jpg hinzugefügt wird, dann soll ein neuer Ordner erstellt werden und in desem soll dann auch das Bild 001025.jpg eingefügt werden. Das würde dann so aussehn. \Grafik\000002\001025-......

Kann mir jemand da mal nen Tipp geben?

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: So 06.02.05 14:00 
jackie hat folgendes geschrieben:
Ich möchte nun aber die tatsächliche Anzahl der Dateien in einem Ordner ausgegeben haben.

Dafür kannst du FindFirst & FindNext benutzen. Als Attr übergibts du faAnyFile und als Platzhalter *.*, damit alle Dateien gesucht werden. Dann musst du nur noch das Ergebnis überprüfen, ob es sich nicht um ein Verzeichnis handelt.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function AnzahlAnDateienInDiesemOrdner(const Pfad: String): Integer;
var
  SR: TSearchRec;
begin

  Result := 0;
  if FindFirst(IncludeTrailingPathDelimiter(Pfad) + '*.*', faAnyFile, SR) = 0 then
  begin
    repeat
      if not ((SR.Attr or faDirectory) = SR.Attr) then
        Inc(Result);
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;

end;

_________________
Ciao, Sprint.
jackie
Hält's aus hier
Beiträge: 9

Win XP
D5 Prof
BeitragVerfasst: So 06.02.05 14:25 
Vielen Dank erstmal. Ich habe da allerdings noch ein Problem und zwar wenn ich den Code ausführe bekomme ich die Meldung das IncludeTrailingPathDelimiter ein undefinierter Bezeichner ist. In der Delphi Hilfe steht nichts von IncludeTrailingPathDelimiter. Das einzige was ich da gefunden habe ist IncludeTrailingBackslash(const S: string): string ( MIt IncludeTrailingBackslash wird an einen Pfadnamen (angegeben im Parameter S) der Backslash (\) angehängt. Falls S bereits mit einem Backslash endet, gibt IncludeTrailingBackslash eine Kopie von S zurück.) :(
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: So 06.02.05 14:30 
IncludeTrailingPathDelimiter gibt es nicht unter Delphi 5. Aber du kannst beruhigt IncludeTrailingPathDelimiter durch IncludeTrailingBackslash ersetzen.

_________________
Ciao, Sprint.
jackie
Hält's aus hier
Beiträge: 9

Win XP
D5 Prof
BeitragVerfasst: So 06.02.05 14:41 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function AnzahlAnDateienInDiesemOrdner(const Pfad: String): Integer;
var
  SR: TSearchRec;
begin

  Result := 0;
  if FindFirst(IncludeTrailingPathDelimiter(Pfad) + '*.*', faAnyFile, SR) = 0 then
  begin
    repeat
      if not ((SR.Attr or faDirectory) = SR.Attr) then
        Inc(Result);
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;

end;


Für den Pfad setzte ich doch z.B. D:\Programmierung\Delphi\Progs\Bilderverwaltung\Bilder\ oder?
Wenn ich das mache, dann bekomme ich die Meldung "Ungültiger Wert der Eigenschaft"

Ich glaub ich raff es nicht. :roll:

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.