Seite 1 von 1

Windows: Festplattenaktiväten feststellen

Verfasst: Montag 28. April 2008, 14:07
von Fabian Kochem
Hallo,

ich bin grade dabei, ein Programm für digitale DJs zu erstellen (DJs, die anstatt mit Schallplatten mit MP3s auflegen). In diesen Kreisen ist es üblich, die MP3s zu "normalisieren", d.h. auf eine gleiche Lautstärke zu bringen. Programme für diesen Vorgang existieren, ich möchte das ganze aber noch einfacher machen und diesen Vorgang optimieren, sodass eine MP3, sobald sie auf der Festplatte landet, automatisch normalisiert wird.
Dabei dachte ich an die Funktionalität, die auch Virenscanner mit sich bringen - sobald sich auf der Festplatte eine Datei verändert, wird diese vom Anti-Virus-Programm auf schädlichen Code hin gescannt.
Meine Frage ist: gibt es eine Möglichkeit, sich auch per Python da hineinzuhooken? Habe schon diverse Suchmaschinen befragt, bin allerdings nicht auf brauchbare Ergebnisse gestoßen und frage somit hier.

Viele Grüße,
Fabian

Verfasst: Montag 28. April 2008, 16:03
von rayo
Unter Windows brauchst du dazu die WinAPI (entweder mit ctypes oder win32api ansprechen).

ReadDirectoryChanges -> http://msdn2.microsoft.com/en-us/librar ... S.85).aspx

Ich hatte mal ein wenig damit rum experimentiert, wenn ich Zeit finde erstelle ich mal ein minimales Beispiel.

Gruss

*edit* So das Beispiel hab ich schon gemacht, hat mich gleich gepackt.
*link entfernt*

Ein Problem gibts aber noch, in der Zeile 150 erstelle ich einen wchar Array, weil der Dateiname als Unicodestring zurückgegeben wird. Jedoch stimmt diese Umwandlung nicht! ''name_length'' ist nämlich in Bytes und nicht in Characters. Also ab und zu sind zuviele Zeichen im Dateinamen.

Hab auf die schnelle gerade nichts gefunden um richtig Umzuwandeln.

*edit2*
hab eine neue Version bei der glaubs der Fehler mit dem Dateiname nicht mehr auftritt
DirWatcher

Verfasst: Dienstag 29. April 2008, 12:38
von lunar
Unter Linux ist das pyinotify (Google-Suche hilft). Das Ganze hat einen angenehme API und ist recht komfortabel nutzbar.

Ein Hinweis zu Windows: Virenscanner werden kaum die win32-API nutzen, sondern eher Kerneltreiber bauen, um Änderungen abzufangen. Über die win32-API sind bestimmte Dinge wie das Sperren verseuchter Dateien gar nicht machbar. Zudem hat ReadDirectoryChanges ein Design-Problem: Es ist nicht genau genug. Wenn sich Dateien sehr schnell ändern (z.B. Logfiles eines voll ausgelasteten Serverdienstes), bekommt die Anwendung nicht alle Änderungsereignisse mit.

Das gilt übrigens nicht für inotify, dort werden Ereignisse zwischengespeichert, bis die Anwendung sie ausliest.

Verfasst: Dienstag 29. April 2008, 23:38
von Fabian Kochem
rayo hat geschrieben:Unter Windows brauchst du dazu die WinAPI (entweder mit ctypes oder win32api ansprechen).

ReadDirectoryChanges -> http://msdn2.microsoft.com/en-us/librar ... S.85).aspx

Ich hatte mal ein wenig damit rum experimentiert, wenn ich Zeit finde erstelle ich mal ein minimales Beispiel.

Gruss

*edit* So das Beispiel hab ich schon gemacht, hat mich gleich gepackt.
DirWatcher

Ein Problem gibts aber noch, in der Zeile 150 erstelle ich einen wchar Array, weil der Dateiname als Unicodestring zurückgegeben wird. Jedoch stimmt diese Umwandlung nicht! ''name_length'' ist nämlich in Bytes und nicht in Characters. Also ab und zu sind zuviele Zeichen im Dateinamen.

Hab auf die schnelle gerade nichts gefunden um richtig Umzuwandeln.
Oha, damit hätte ich jetzt nicht gerechnet.
Vielen Dank!

lunar: Guter Punkt. Solche Probleme sind in meinem Fall aber relativ selten, sodass ich das (erstmal) vernachlässigen kann. Die Anwendung ist ja noch nicht mal zeitkritisch, und mit vollausgelasteten Serverdiensten habe ich es auch nicht zu tun. Nichtsdestotrotz danke für den Hinweis, sollten Probleme auftauchen werde ich an deinen Post denken.