Wie überwache ich die Größe einer Datei?

0

Gibt es ein Programm, das ständig eine bestimmte Dateigröße auf der Festplatte überprüft, etwa alle 5 Minuten oder so?

Wenn die Dateigröße nicht mehr zunimmt, würde ich eine Aktion X ausführen (X vom Benutzer festgelegt - z. B. eine Anwendung starten oder einen Sound abspielen).

Betriebssystem - Windows 7 Home

Der folgende Code funktioniert nicht. Die Dateigröße wird nicht richtig erfasst. Wenn ich mit der rechten Maustaste auf die Datei klicke und ihre Größe überprüfe, wird sie ständig aktualisiert. Das AutoIt-Skript scheint jedoch nicht alle 2 Minuten die richtige Größe zu erfassen. Wenn ich das Zeitintervall auf 5 Minuten erhöhe, nimmt es nur dann die aktualisierte Größe EINMAL auf.

Global $logging = True
$file = $CmdLine[1] & "\" & $CmdLine[2]
_log("Filename: " & $file)
$size = 0 ;set initial size to 0
Sleep(60000) ;sleep 1 minute
If FileExists($file) Then
    While 1 ;loop indefinitely
        $filesize = FileGetSize($file) ;get current size of file
        _log("File Size: " & $filesize)
        If $filesize = $size Then ;compare new size with old size
            _log("Download Halted: " & $filesize) ;notify that file is complete
            Run("AStart.bat", $CmdLine[1])
            ExitLoop ;exit
        EndIf
        $size = $filesize ;save current file size
        Sleep(120000) ;sleep 2 minutes
    WEnd
Else
    MsgBox(0, "File Not Found", "File Not Found! - " & $file)
EndIf

Func _log($message)     
    If $logging Then ; global variable where you can globally switch OFF/ON logging      
        FileWriteLine(@ScriptDir & "\file.log", @YEAR & "-" & @MON & "-" & @MDAY & "-" & @HOUR & ":" & @MIN & " --> " & $message)     
    EndIf 
EndFunc
TPR
quelle
Welches Betriebssystem? Die Methode wäre je nach System sehr schwierig.
billc.cn
2
Beschreiben Sie besser das Problem, das Sie haben - es gibt möglicherweise bessere Möglichkeiten, es zu lösen, als die Ausgabedatei zu überwachen.
Paul
Welches Betriebssystem benutzt du? Mit UNIX-ähnlichen Systemen können Sie alle 5 Minuten einen Cron-Job (Shell-Skript) ausführen, der das tut, was Sie wollen.
ott--
Ich kenne keine, aber das ist etwas, das mit einem kleinen Skript leicht gehandhabt werden könnte. Wenn Sie beispielsweise Windows verwenden, verfügt AutoIt über einige gute Funktionen (FileOpenDialog, FileGetSize, SoundPlay, ShellExecute). Verwenden Sie sie mit einer einfachen Schleife und Sie haben genau das, was Sie wollen.
MaQleod
@ Paul Ich habe hier gefragt, aber niemand hat geantwortet, daher dachte ich, meine Frage sei unangemessen. Superuser.com/questions/352675/…
TPR

Antworten:

1

Hier ist ein einfaches AutoIt-Skript, das alle 3 Minuten einen Zyklus durchführt und eine angegebene Datei auf Änderungen in der Dateigröße überprüft. Wenn sich in diesen 3 Minuten nichts geändert hat, wird ein Meldungsfeld eingeblendet. Ich habe es kommentiert, damit Sie sehen können, was jede Zeile tut. Mit der gut dokumentierten Hilfedatei und dem aktiven Hilfeforum von AutoIt sollte es sich leicht an Ihre Bedürfnisse anpassen lassen.

$file = FileOpenDialog("Select a File", @MyDocumentsDir, "All (*.*)") ;select a file
$size = 0 ;set initial size to 0

While 1 ;loop indefinitely
    $filesize = FileGetSize($file) ;get current size of file
    If $filesize = $size Then ;compare new size with old size
        MsgBox(64, "Download Complete", "File size has not changed in 3 minutes, download complete") ;notify that file is complete
        ExitLoop ;exit
    EndIf
    $size = $filesize ;save current file size
    Sleep(180000) ;sleep 3 minutes
WEnd

Andere Funktionen, an denen Sie interessiert sein könnten: ShellExecute () Run () SoundPlay () TimerInit () TimerDiff () FileExists ()

MaQleod
quelle
Hast du eine Idee, warum FileGetSize nicht funktioniert? Siehe meinen Beitrag. Ist es ein bekanntes Problem?
TPR
0

Nicht, dass ich wüsste, aber ich habe gerade etwas geschaffen, das dies für Sie tun kann!

FileWatchAndDoSomething:

Bildbeschreibung hier eingeben

Sie starten es, wählen die zu überwachende Datei aus, wählen den Timer aus, wählen die zu überwachende Bedingung aus und schließlich die zu startende Datei, wenn die Bedingung erfüllt ist.

Bitte beachten Sie, dass dies etwas ist, was ich gerade in ein paar Minuten geschrieben habe, ich habe es getestet, aber keine Garantie ...

Download-Link

William Hilsum
quelle
Ich weiß, dass Sie gesagt haben, Sie spielen einen Sound oder eine andere Aktion - ich habe noch nie mit Audio rumgespielt und ich würde es wahrscheinlich vermasseln ... Mit dieser Anwendung können Sie ganz einfach eine Batch-Datei oder ähnliches einstellen, sodass Sie immer einen Sound durchspielen können das und eine Drittanbieter-App oder ähnliches.
William Hilsum
Es hat bei mir nicht funktioniert! Ich weiß die Mühe zu schätzen. Auf welchem ​​Betriebssystem haben Sie es getestet?
TPR
@progtick Windows 7 - Was ist das Problem, das Sie haben?
William Hilsum
Die Datei wird nicht gestartet. Ich habe versucht, beide Optionen "Änderungen" und "Ändert sich nicht"
TPR
@progtick ... Ich nehme nicht an, dass es Ihnen etwas ausmacht, es noch einmal zu testen? Ich verwende nur den Shell-Befehl, der hier zu funktionieren scheint, also mache ich mir ein wenig Sorgen, wenn er an anderer Stelle nicht funktioniert! Können Sie den Timer 1aktivieren und anschließend eine Textdatei auf Ihrem Desktop erstellen, in der sich Mülltext befindet? Wählen Sie diese Datei mit dem Namen c: \ windows \ system32 \ calc.exe als Startdatei aus. Klicken Sie dann (einmal) auf Start. Und versuchen Sie, die Textdatei zu ändern? ... Wenn Sie das nicht zum Laufen bringen können, werde ich sehen, ob es etwas gibt, das ich schnell tun kann, aber ich kann den Fehler hier nicht sehen :(
William Hilsum