Autor |
Beitrag |
salmanasar
      
Beiträge: 16
|
Verfasst: So 10.10.04 22:30
gibts ne funktion mit der ich rausfinde, wieviele Dateien sich in einem ordner befinden?
danke
Salmanasar
|
|
.Chef
      
Beiträge: 1112
|
Verfasst: 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.  Vielleicht gibts auch 'ne API-Funktion dafür, kann mich aber an keine erinnern ...
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 
      
Beiträge: 16
|
Verfasst: 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
      
Beiträge: 1112
|
Verfasst: So 10.10.04 22:49
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
|
Verfasst: 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
      
Beiträge: 1112
|
Verfasst: 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
|
Verfasst: 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
|
Verfasst: 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)
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 Christian S.: Code- durch Delphi-Tags ersetzt.
|
|
.Chef
      
Beiträge: 1112
|
Verfasst: Do 14.10.04 22:11
Mit explizit meinte ich:
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
|
Verfasst: 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
|
Verfasst: 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
      
Beiträge: 1112
|
Verfasst: Do 14.10.04 22:35
Aha.  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
|
Verfasst: 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
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 15.10.04 10:26
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 if (faanyfile and Sr.Attr = fasysfile ) then if (Sr.Attr AND fasysfile > 0) then 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
|
Verfasst: 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
|
Verfasst: 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.
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 (Sr.Attr > 0) then 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 raziel: Code- durch Delphi-Tags ersetzt.
|
|
Sprint
      
Beiträge: 849
|
Verfasst: 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.
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
|
Verfasst: 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
      
Beiträge: 849
|
Verfasst: 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
|
Verfasst: So 06.02.05 14:41
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.
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt.
|
|