Um ein solches Windows-Programm zu erstellen, das Änderungen in Dateien innerhalb eines Verzeichnisses und seiner Unterverzeichnisse überwacht und das Änderungsdatum rekursiv bis zu einem bestimmten Elternverzeichnis aktualisiert, kannst du eine Anwendung in einer Programmiersprache wie Python schreiben. Python bietet dafür eine einfache Möglichkeit mit dem Modul
watchdog
, das Dateisystemänderungen überwachen kann.
Hier ist eine beispielhafte Implementierung:
### Voraussetzungen
1. Installiere Python (falls noch nicht installiert).
2. Installiere das
watchdog
-Modul mit pip:
Code:
bash
pip install watchdog
### Beispielprogramm
Python:
import os
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class ChangeHandler(FileSystemEventHandler):
def __init__(self, root_dir, parent_dir):
self.root_dir = root_dir
self.parent_dir = parent_dir
def on_modified(self, event):
if event.is_directory:
return
# Datei wurde geändert, also aktualisieren wir die Verzeichnisse
self.update_directories(event.src_path)
def update_directories(self, file_path):
# Hole den relativen Pfad der Datei
relative_path = os.path.relpath(file_path, self.root_dir)
# Teile den Pfad in seine Komponenten auf
path_parts = relative_path.split(os.sep)
# Beginne beim tiefsten Verzeichnis und arbeite dich bis zum Elternverzeichnis hoch
current_dir = self.root_dir
for part in path_parts[:-1]: # Letztes Element ist die Datei selbst
current_dir = os.path.join(current_dir, part)
os.utime(current_dir, None)
# Wenn das aktuelle Verzeichnis das Elternverzeichnis erreicht hat, breche ab
if os.path.abspath(current_dir) == os.path.abspath(self.parent_dir):
break
def start_monitoring(root_dir, parent_dir):
event_handler = ChangeHandler(root_dir, parent_dir)
observer = Observer()
observer.schedule(event_handler, path=root_dir, recursive=True)
observer.start()
print(f"Überwachung gestartet. Beobachte Änderungen in {root_dir}...")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
if __name__ == "__main__":
root_dir = r"C:\Pfad\zum\Überwachenden\Verzeichnis"
parent_dir = r"C:\Pfad\zum\Elternverzeichnis"
start_monitoring(root_dir, parent_dir)
### So funktioniert das Programm:
1.
ChangeHandler-Klasse: Diese Klasse erbt von
FileSystemEventHandler
und überschreibt die Methode
on_modified
, die bei jeder Änderung einer Datei aufgerufen wird. Wenn eine Datei geändert wird, wird die
update_directories
-Methode aufgerufen, die die Änderungszeit der Verzeichnisse entlang des Pfads bis zum angegebenen Elternverzeichnis aktualisiert.
2.
start_monitoring-Funktion: Diese Funktion startet den
Observer
, der das angegebene
root_dir
rekursiv überwacht. Änderungen werden an den
ChangeHandler
gesendet.
3.
main-Funktion: Hier kannst du das zu überwachende Verzeichnis (
root_dir
) und das Elternverzeichnis (
parent_dir
) festlegen.
### Verwendung:
1. Passe die Pfade
root_dir
und
parent_dir
in der
main
-Funktion an deine Bedürfnisse an.
2. Führe das Skript aus. Es beginnt dann, das angegebene Verzeichnis und seine Unterverzeichnisse zu überwachen.
3. Bei jeder Änderung einer Datei wird das Änderungsdatum der Verzeichnisse bis zum angegebenen Elternverzeichnis aktualisiert.
Dieses Programm kann als einfaches Tool dienen, um Dateisystemänderungen zu überwachen und entsprechende Metadaten zu aktualisieren. Es kann bei Bedarf weiter angepasst werden, z. B. um zusätzliche Ereignisse oder Funktionen zu unterstützen.