Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Synchronisation von Ordnern (https://www.delphipraxis.net/85020-synchronisation-von-ordnern.html)

Telefonkabel 24. Jan 2007 19:10


Synchronisation von Ordnern
 
Hej, Delphianer!
Ein neuer Tag ist angebrochen und schon hab ich wieder eine neue Frage.
Diesmal handelt es sich um ein Ordnersynchonisationsprogramm.
Es läuft auch alles soweit, nur habe ich ein Problemchen. Und zwar kommt es vor, dass Ordner das Attribut "Archiv" haben. Folglich erkennt die Findfirst Funktion diesen Ordner nicht als Ordner an --> Der Ordner wird nicht in dem Synchronisationsverzeichnis angelegt, da es ja durch diese Eigenschaft kein richtiger Ordner mehr ist.
Meine Frage ist nun, wie ich dem Programm sagen kann, dass es sich dabei doch um einen Ordner und kein Archiv handelt.
(Eigenschaften der Ordner von Hand ändern ist keine Lösung)

MfG
Telekab.

sirius 24. Jan 2007 20:03

Re: Synchronisation von Ordnern
 
Abgesehen davon, dass das Attribut Archiv obsolet ist, erkennt er Ordner, die mit Archive gekennzeichnet sind bei mir trotzdem als Verzeichnis, solange sie das Directoryattribut haben.

Telefonkabel 24. Jan 2007 20:48

Re: Synchronisation von Ordnern
 
Nun, in gewisser Weise erkennt er sie ja auch, aber irgendwie erstellt er sie nicht.
Ich habe folgendes gemacht.
Zuerst sucht er nach einem Ordner über findfirst.
Dann überprüft er in einer If-Clause, ob das gefundene Etwas ein Ordner ist (also file = fadirectory) und wenn es eines ist, so soll er es über createdirectory erstellen. Und eben Letzteres tut er nicht bei einem Ordner mit dem Archiv-Attribut.
Wo liegt der Fehler?


MfG
Telekab.

Michael Habbe 24. Jan 2007 21:15

Re: Synchronisation von Ordnern
 
Du solltest nicht auf "file = faDirectory" prüfen. Wenn dort noch andere Attribute gesetzt sind, ergibt dieser Vergleich False.

Besser ist es, auf bestimmte Attribute mit AND zu prüfen.

Delphi-Quellcode:
  FindResult := FindFirst(Dir + '*.szf', faAnyFile, SearchRec);
  while FindResult = 0 do
  begin
    [..]
    Attr := '';
    if (SearchRec.Attr and SysUtils.faReadOnly) <> 0 then // auch: ) = faReadOnly
      Attr := 'R';
    if (SearchRec.Attr and faHidden) <> 0 then           // auch: ) = faHidden
      Attr := Attr + 'H';
    if (SearchRec.Attr and faSysFile) <> 0 then          // auch: ) = faSysFile
      Attr := Attr + 'S';
    if (SearchRec.Attr and faArchive) <> 0 then          // auch: ) = faArchive
      Attr := Attr + 'A';
    ListItem.SubItems.Add(Attr);

    FindResult := FindNext(SearchRec);
  end;
  FindClose(SearchRec);
Code:
Attribut, z.B. 11001101
AND fa... z.B. 01001000
Ergebnis:     01001000
mfg
Michael

Alter Mann 25. Jan 2007 12:24

Re: Synchronisation von Ordnern
 
Hi

@sirius

In welcher Quelle steht denn das?
Zitat:

Abgesehen davon, dass das Attribut Archiv obsolet ist...
Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz