AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Dateiänderungen protokollieren

Ein Thema von joehoehal · begonnen am 9. Aug 2015 · letzter Beitrag vom 11. Aug 2015
Antwort Antwort
joehoehal

Registriert seit: 5. Aug 2012
Ort: Halle (Saale)
21 Beiträge
 
Delphi XE2 Starter
 
#1

Dateiänderungen protokollieren

  Alt 9. Aug 2015, 22:22
Hallo,
ich möchte für ein gezieltes Backup protokollieren, welche Dateien in einem vorgegebenen Verzeichnis innerhalb eines bestimmten Zeitraums neu angelegt oder geändert wurden. Dafür habe ich auf http://www.torry.net/pages.php?id=252 ATFileNotification gefunden. Die Komponente soll bei jeder Dateiänderung im o. g. Sinne ein Ereignis OnChanged auslösen, was auch problemlos funktioniert. Leider habe ich aber keinen Weg gefunden festzustellen, welche Datei geändert worden ist. Kann jemand helfen?
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#2

AW: Dateiänderungen protokollieren

  Alt 10. Aug 2015, 07:50
Wie wäre es stattdessen, beim Sichern das 'Archive'-Flag der Datei zurückzusetzen? Bei jeder Änderung wird das nämlich eh automatisch gesetzt.

Du musst also nur die Dateien berücksichtigen, bei denen das Archiv-Bit gesetzt ist. (Siehe 'FindFirst', Attribute und 'faArchive')

Bezüglich deiner Frage: Ich habe mir beholfen, indem ich immer das Verzeichnis vergleiche. D.h. vorher vs. nachher. Nach dem Vergleich (also wenn das Event eingetreten ist), setze ich 'vorher := nachher'. Bei der nächsten Änderung/Event lese ich das Verzeichnis wieder ein, vergleiche usw.

Es gibt bestimmt einfachere Möglichkeiten. Wenn Du aber ein Backup programmieren sollst, würde ich mir meine Alternativlösung mal anschauen.

PS: Du kannst auch eine der anderen Lösungen auf Torry ausprobieren, dieser 'DirMonitor' wirbt ja gerade mit den Features, nach denen Du suchst'.
Zitat:
Monitored Events:
•File/Folder Creation, Modify, Change, Deletion, Rename.
•Security changes.
•A single notification for every event.
•Subdirectory notification.
•The event receives the Path + File Name affected and selected Action.

Geändert von Dejan Vu (10. Aug 2015 um 07:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Dateiänderungen protokollieren

  Alt 10. Aug 2015, 11:04
Weiterhin gibt es ja auch das Datum des letzten Zugriffs und für die letzte Änderung. Wenn da nicht "Touch" im Spiele ist, sollten diese Daten recht zuverlässig sein.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
hanvas

Registriert seit: 28. Okt 2010
168 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Dateiänderungen protokollieren

  Alt 10. Aug 2015, 17:48
Hallo,
Leider habe ich aber keinen Weg gefunden festzustellen, welche Datei geändert worden ist. Kann jemand helfen?
Wenn Performance nicht der Maßstab ist, entweder viel Speicher zur Verfügung steht oder die Anzahl der Dateien klein ist, könntest Du für jedes zu überwachende Verzeichnis initial eine Dateiliste anlegen. Jedes Datum der Liste müsste die Daten enthalten (Namen,Änderungsdatum,Dateigröße) etc.

Zum Zeitpunkt der Änderung erstellst Du eine neue Liste, anschließend vergleichst Du die beisten Liste. Die Unterschiede in den Listen sind die Änderungen die zwischen dem Zeitpunkt der Erstellung der ersten Liste und dem Zeitpunkt der Erstellung der zweiten Liste aufgetreten sind.

cu Ha-Jö
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: Dateiänderungen protokollieren

  Alt 10. Aug 2015, 18:19
Im Grunde würde es genügen, den vollständigen Dateinamen sowie das Änderungsdatum (zuletzt geändert) zu speichern und zu vergleichen, wenn man lediglich herausfinden möchte, welche Datei geändert wurde. Die Dateigröße liefert diesbezüglich keine weitere Information, denn eine abweichende Dateigröße würde ebenso wie ein abweichendes Änderungsdatum lediglich darauf hinweisen, daß Änderungen erfolgt sind. Um zu verfolgen, was genau geändert wurde, benötigt man einen Mirror, also ein komplette Doppel der zu überwachenden Dateien.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

AW: Dateiänderungen protokollieren

  Alt 10. Aug 2015, 21:26
Wie bereits erwähnt ist seit ewigen Zeiten das Archiv-Bit für so etwas vorgesehen. Wenn man sich darauf nicht verlassen will, könnte man auch eine kleine Datenbank einrichten, in der man den Verzeichnisnamen, den Dateinamen sowie einen Hash der Datei ablegt. Findet man die Verzeichnis-/Dateikombination nicht oder stimmt der Hashwert nicht überein, muss die Datei gesichert und der DB-Eintrag hinzugefügt bzw. aktualisiert werden. Das nur als Anregung.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
joehoehal

Registriert seit: 5. Aug 2012
Ort: Halle (Saale)
21 Beiträge
 
Delphi XE2 Starter
 
#7

AW: Dateiänderungen protokollieren

  Alt 10. Aug 2015, 22:06
Danke für die vielen Antworten!
Die Vorschläge zur Abfrage von Flags, Zeitstempeln usw. sind allerdings genau das, was ich nicht will. Ich möchte am Ende des Beobachtungszeitraums eine Liste der geänderten Dateien haben und nicht zeitraubend unzählige Dateien auf Änderungen überprüfen. Aber der Tipp von Dejan Vu war der richtige! Ich habe zwar noch nicht alles ausprobiert, aber ich denke, dass ich damit mein Problem lösen kann. Dafür noch mal danke!
Gruß!
joeheohal
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
971 Beiträge
 
Delphi 6 Professional
 
#8

AW: Dateiänderungen protokollieren

  Alt 11. Aug 2015, 08:41
Hallo

ich weiß nicht, wie die ganzen Komponenten auf torry.net funktionieren, jedoch hatte ich mir mal hierfür eine eigene Komponente gebastelt und hierfür einen Thread verwendet, welcher mit GetQueuedCompletionStatus und ReadDirectoryChanges arbeitet.

Stichworte:
CreateFile(

CreateIoCompletionPort(
ReadDirectoryChanges(

-> Thread:
GetQueuedCompletionStatus(
ReadDirectoryChanges(


Hiermit kannste (nach GetQueuedCompletionStatus) aus dem NotificationBuffer auslesen, welche Änderung innerhalb des mit CreateFile angegebenen Verzeichnisses stattgefunden haben, incl FileName.

z.B.:
FILE_ACTION_ADDED,FILE_ACTION_REMOVED,FILE_ACTION_ MODIFIED,FILE_ACTION_RENAMED_OLD_NAME, FILE_ACTION_RENAMED_NEW_NAME

Dies funktioniert auch mit den darunter liegende Unterverzeichnissen.

Leider kann ich die Komponente nicht veröffentlichen.
Aber vielleicht kannste ja mit den Stichworten etwas anfangen.

Edit:
Hab da einen Link gefunden

http://www.delphipages.com/forum/arc...p/t-23547.html

Geändert von HolgerX (11. Aug 2015 um 09:12 Uhr)
  Mit Zitat antworten Zitat
joehoehal

Registriert seit: 5. Aug 2012
Ort: Halle (Saale)
21 Beiträge
 
Delphi XE2 Starter
 
#9

AW: Dateiänderungen protokollieren

  Alt 11. Aug 2015, 10:23
Hallo HolgerX,
dein Vorschlag sieht dem sehr ähnlich, was ich in der Komponente DirMonitor auf Torry gefunden habe. Ich werde weiter versuchen, damit mein Problem zu lösen und auch das Ergebnis posten.
Gruß!
joehoehal
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz