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?
FileGetSize()+Windows 7 - Aktualisierung erzwingen
-
- [ gelöst ]
-
Nathax -
16. Mai 2012 um 15:32 -
Geschlossen -
Erledigt
-
-
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]
[/autoit][autoit][/autoit][autoit]
Func MyFileGetSize( $file ); " are used to deal with files and directories containing spaces
[/autoit][autoit][/autoit][autoit]
; @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 )Dim $fh = FileOpen( @TempDir & '\MyFileGetSize.tmp', 0 )
[/autoit][autoit][/autoit][autoit]
Dim $line = FileReadLine( $fh )
FileClose( $fh )FileDelete( @TempDir & '\MyFileGetSize.tmp' )
[/autoit][autoit][/autoit][autoit]Return( $line )
[/autoit]
EndFunc
© Intruder (http://www.autoitscript.com/forum/topic/89…post__p__657527) -
Danke, die Funktion klappt, Xorianator.
-
Freut mich wenn sie klappt
AutoItScript.com , musste einfach suchen, da findeste fast immer was -
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.
-
Danke für den Tipp, aber es klappt mit 100ms recht gut.