FileGetSize()+Windows 7 - Aktualisierung erzwingen

  • Ich kopiere eine Datei und frage in einer Schleife die Größe mit FileGetSize() ab.
    Windows 7 arbeitet ja übers Cache, da aktualisiert sich die Größe die ersten 2s und danach erst wieder, wenn die Datei komplett kopiert wurde.
    Komischerweise erfolgt auch eine Aktualisierung, wenn man per Rechtsklick->Eigenschaften die Größe nachgucken will. Wie macht Windows das?
    Kann man diese Aktualisierung irgendwie erzwingen?
    Oder gibt es Alternativen zu FileGetSize?

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    Einmal editiert, zuletzt von Nathax (16. Mai 2012 um 18:03)

  • Hm, Windows benutzt bestimmt eine DLL.
    Spontan fällt mir ein, dass du den Explorer.exe (mittels ProcessClose) killen und wieder neustarten könntest- was zumindest bei mir automatisch geschieht.

  • Hier:

    [autoit]


    Func MyFileGetSize( $file )

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

    ; " are used to deal with files and directories containing spaces
    ; @SW_ HIDE is used to avoid flickering shell windows
    ; for-command used for quicker access to filesize instead of parsing dir-command, for details see for /?
    RunWait( @Comspec & ' /c for %f in ("' & $file & '" ) do echo %~zf>%TEMP%\MyFileGetSize.tmp', '', @SW_HIDE )

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

    Dim $fh = FileOpen( @TempDir & '\MyFileGetSize.tmp', 0 )
    Dim $line = FileReadLine( $fh )
    FileClose( $fh )

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

    FileDelete( @TempDir & '\MyFileGetSize.tmp' )

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

    Return( $line )
    EndFunc

    [/autoit]


    © Intruder (http://www.autoitscript.com/forum/topic/89…post__p__657527)

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Freut mich wenn sie klappt ;)
    AutoItScript.com , musste einfach suchen, da findeste fast immer was

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Dürfte aber ziemlich lahm sein, gerade dann wenn man die funktion in kurzen Intervallen innerhalb einer Schleife aufruft. Wenn würde ich das Ergebnis nicht in eine Datei umleiten, sondern stattdessen den stdout des DOS Befehls auslesen.