Windows: Festplattenaktiväten feststellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Fabian Kochem
User
Beiträge: 36
Registriert: Mittwoch 5. April 2006, 14:11
Wohnort: Köln

Windows: Festplattenaktiväten feststellen

Beitragvon Fabian Kochem » Montag 28. April 2008, 14:07

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
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Montag 28. April 2008, 16:03

Unter Windows brauchst du dazu die WinAPI (entweder mit ctypes oder win32api ansprechen).

ReadDirectoryChanges -> http://msdn2.microsoft.com/en-us/library/aa365465(VS.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
Zuletzt geändert von rayo am Dienstag 8. Juli 2008, 08:30, insgesamt 1-mal geändert.
lunar

Beitragvon lunar » Dienstag 29. April 2008, 12:38

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.
Fabian Kochem
User
Beiträge: 36
Registriert: Mittwoch 5. April 2006, 14:11
Wohnort: Köln

Beitragvon Fabian Kochem » Dienstag 29. April 2008, 23:38

rayo hat geschrieben:Unter Windows brauchst du dazu die WinAPI (entweder mit ctypes oder win32api ansprechen).

ReadDirectoryChanges -> http://msdn2.microsoft.com/en-us/library/aa365465(VS.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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder