Autor Beitrag
Lemmy
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: Mo 12.07.10 20:02 
Hallo,

ich versuche in einem Verzeichnis die Dateien ausfindig zu machen, bei denen das Archivbit gesetzt ist:
ausblenden 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 user profile iconNarses: Code- durch Delphi-Tags ersetzt
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Mo 12.07.10 20:05 
musst das nicht + oder AND statt - heißen? :gruebel:

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Di 13.07.10 00:12 
Beispiel:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: Di 13.07.10 07:57 
Guten Morgen,

user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
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