Entwickler-Ecke
Dateizugriff - Delphi 7: FindFirst und Archivbit - es geht einfach nicht
Lemmy - Mo 12.07.10 20:02
Titel: Delphi 7: FindFirst und Archivbit - es geht einfach nicht
Hallo,
ich versuche in einem Verzeichnis die Dateien ausfindig zu machen, bei denen das Archivbit gesetzt ist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var SR : TSearchRec; iSearchAtt:Integer; begin if FindFirst(AFilePath + '*.*', faAnyFile-faArchive, SR) = 0 then try repeat if (SR.Name <> '.') and (SR.Name <> '..') then begin Form1.Memo1.Lines.Add(sr.Name); end; until FindNext(SR) <> 0; finally FindClose(SR); end; end; |
Das Problem ist, er listete mir immer alle Dateien auf, also nicht nur die mit dem Archivbit. Seltsam dabei ist auch, dass die Abbriva-Zipkomponenten an der selben Stelle auch ein Problem haben, d.h. wenn ich beim Hinzufügen von Dateien zum Archiv faArchvie angebe, dann werden dennoch alle Dateien gezippt.
Unter der KOmmandozeile kann ich mir die Dateien korrekt anzeigen lassen (DIR /A:A)
Oder sind diese beiden "Archive" nicht identisch? Ich hoffe, dass hier jemand Licht ins Dunkle bringen kann....
GRüße
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
ZeitGeist87 - Mo 12.07.10 20:05
musst das nicht + oder AND statt - heißen? :gruebel:
jaenicke - Mo 12.07.10 20:16
Um genau zu sein bringen mathematische Operatoren hier nix. In diesem Fall wäre es
and not statt dem Minuszeichen.
Aber du willst ja gerade Dateien mit Archivbit, du nimmst aber genau die heraus aus der Suche...
Wie sieht es so aus:
Delphi-Quelltext
1: 2:
| if FindFirst(AFilePath + '*.*', faArchive, SR) = 0 then try |
Außerdem kannst du ja auf das Attribut auch nach der Suche testen.
Lemmy - Mo 12.07.10 23:05
Hi,
sorry das war ein Copy-Paste Fehler, ich habe so viel ausprobiert....
@jaenick: auch den Source habe ich getestet. Es kommen auch da alle Dateien. Wie gesagt, mein Latein hört da auf. Klar kann ich auch das Attribut auch noch später prüfen, aber spätestens wenn ich die Zipkomponente einsetze geht es wieder schief, außer ich fange an, jede einzelne Datei hinzuzufügen.... Ich schlaf jetzt mal ne Nacht drüber...
Gerd Kayser - Di 13.07.10 00:12
Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.Button1Click(Sender: TObject); var Search : TSearchRec; Verz : String; begin Verz := 'h:\'; Memo1.Clear; if FindFirst(Verz + '*.*', faAnyFile, Search) = 0 then try repeat if (Search.Attr and faArchive) = faArchive then Memo1.Lines.Add(Search.Name); until FindNext(Search) <> 0; finally SysUtils.FindClose(Search); end; end; |
Die Attribute werden beim Aufruf von FindFirst nicht ausgewertet. Also muß das Ergebnis danach gefiltert werden. Bei FindClose sollte man SysUtils davor setzen, weil es die Funktion zweimal gibt (Windows und SysUtils).
Lemmy - Di 13.07.10 07:57
Guten Morgen,
Gerd Kayser hat folgendes geschrieben : |
Beispiel:
Die Attribute werden beim Aufruf von FindFirst nicht ausgewertet. Also muß das Ergebnis danach gefiltert werden. Bei FindClose sollte man SysUtils davor setzen, weil es die Funktion zweimal gibt (Windows und SysUtils). |
ich bekomem gleich Krätze...
Vielen Dank an euch alle!!!
Grüße
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!