Bestimmten Ordner nach Veränderungen checken?

  • Hallo,
    ich habe mir einen Netzwerkordner erstellt, auf dem Dateien plaziert oder gelöscht werden können. Wird jeder kennen, einfach nur, damit man unter der Familie nicht immer mit USB Sticks rumhantieren muss wenn man nem Familienmitglied ne Datei geben/zeigen will. (auf gut Deutsch: Bruder oder Vater :) ) So, nachdem ich im regelmäßigen Abchecken von Ordnern nicht so zuverlässig bin und mein Vater immer mault, würd ich gern ein kleines Programm schreiben das mir ausgibt wann immer etwas in diesem Ordner geändert wird.
    Mit geändert mein ich nur die Anzahl der Dateien im Ordner, d.h. etwas neues hinzugefügt oder eine Datei gelöscht.
    Ich würde mir das folgendermaßen vorstellen:
    AutoIt checkt mithilfe von _FileListToArray den Ordner aus. Das ganze wird dann in.. sagen wir mal 2 Minuten oder so noch einmal gemacht und dann miteinander verglichen, d.h., dass mir AutoIt nur ausgibt wann etwas geändert wird, das ganze im 5 Minuten Takt oder so. Mit MsgBox und so ist ja dann simpel.
    Aber - wie verknüpf ich das ganze ? ?( Ich hab nur die Grundidee, aber weiter komme ich nicht. :(
    Würde mich über Hilfe freuen ! :thumbup:

  • Du musst aber auch beachten das wenn eine Datei entnommen wird und eine Datei hinzugefügt wird die Rückgabe von Ubound gleich ist, und es keine Meldung geben wird, ansonsten könntest du die Namen der Files überprüfen ob sich da was getan hat.

  • einfaches Beispiel:

    Spoiler anzeigen
    [autoit]

    #Include <File.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $diffneu
    Global $diff = _getFiletoString(@DesktopDir)
    While 1
    _MySleep(12000)
    $diffneu = _getFiletoString(@DesktopDir)
    If $diff <> $diffneu Then
    MsgBox(0, '', 'Unterschied gefunden',5)
    EndIf
    $diff = $diffneu
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _getFiletoString($path)
    Local $FileList=_FileListToArray($path), $string = ''
    If @Error=1 Or @error = 4 Then Return
    For $i = 1 To Ubound($FileList) -1
    $string &= $FileList[$i]
    Next
    Return $string
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _MySleep($SL_Time)
    Local $SL_Timer = TimerInit()
    While TimerDiff($SL_Timer) < $SL_Time
    Sleep(10)
    WEnd
    EndFunc

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Sehr geil, dankeschön. :thumbup:
    Vorallem an Schnuffel. War auch gerade am werkeln aber so ist es fast ideal. Großes Danke !
    Eine Frage noch. Ich geb ja den Desktop mithilfe von @DesktopDir an, allerdings geht es mir ja nur um einen Ordner. Da bei _FileListToArray bzw. _getFiletoString aber kein Pfad eingegeben werden kann, wie geb ich da nen bestimmten Ordner an? Oder kann man den Pfad angeben ?! In der Hilfe find ich jedenfalls nichts. Und mit ausprobiert scheiterts auch.. -_-


    @marco1710 : Wär ne gute Idee, allerdings relativ egal, da das Programm ja eh alle paar Sekunden überprüft ob sich was geändert hat. :)


    EDIT: Passt schon, hab einfach die file in den Ordner reingehaun und statt @DesktopDir @ScriptDir genommen. :)

    2 Mal editiert, zuletzt von Hime (4. Mai 2011 um 18:03)

  • bitte im ersten Post Deinen Thread auf "gelöst" setzen, wenn dem so ist.
    Danke

    ... und freut mich wenn alles passt. :D

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)