Sign in to follow this  
Followers 0
Justmobile

File size checking ?

13 posts in this topic

Hi all,

Question,

is it possible to do some action if an given file has been changed (file size), this mean i give the info from the file tst.txt and do an check serveral times on the contents or size of the file if there is any change i need to do a new action.

But the tracker is, do i need make a loop that will check every xx sec. to that file or is there an nicer way for it.

I hope someone has a solution.

thanks

justmobile

Share this post


Link to post
Share on other sites



Nicer? What do you mean?

$sFile = 'Filename here'
$iTime = 60 ;in seconds

Do
   $old = FileGetSize($sFile)
   Sleep($iTime * 1000)
   $new = FileGetSize($sFile)
   If $new <> $old Then ExitLoop
Until 0
MsgBox(0,'','Changed')

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

ezzetabi, think you made a logic error ......

Should take the $old out of the loop..... :)

$sFile = 'Filename here'
$iTime = 60;in seconds
$old = FileGetSize($sFile)
Do
  Sleep($iTime * 1000)
  $new = FileGetSize($sFile)
  If $new <> $old Then ExitLoop
Until 0
MsgBox(0,'','Changed')

EDIT: Thinking again: your version should work too.. :)

Edited by JdeB

Visit the SciTE4AutoIt3 Download page for the latest versions  - Beta files                                How to post scriptsource        Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites

#4 ·  Posted (edited)

Try this (untested):

Dim $fileCheck = "C:\CheckFile.txt"; This is the file being checked
Dim $fileSize; This is the file size to check against (in Kb) 
Dim $secCheck = 30; This is the time increment to check the file
Dim $lastCheck; This is the last time the file was checked

$fileSize = FileGetSize( $fileCheck )
$lastCheck = TimerInit()
$secCheck = $secCheck * 1000

While 1
   If( TimerDiff( $lastCheck ) >= $secCheck ) Then
      If FileChange( $fileCheck, $fileSize ) Then
        ; Do something here if the size is the same
      Else
        ; Do something here if the file size changed 
      EndIf
      $lastCheck = TimerInit()
   EndIf
   Sleep(10)
Wend

Func FileChange( $file, $size )
   Return (FileGetSize($file) = $size)
EndFunc

You may also want to add a hot key to close it, but that is a general proof of concept, hope it helps.

*** Matt @ MPCS

EDIT: And of cource I am late again.

Edited by Matt @ MPCS

Share this post


Link to post
Share on other sites

In fact it is the same if you leave the loop.

But my 'edition' will be easier to use if you want just call a func when you find that size changed.

You do the func, the size is reload in $old and after the wait checked again...

Share this post


Link to post
Share on other sites

#6 ·  Posted (edited)

Cool guys, Yes i will try it all , it seems only the TimerInit(), is unknow for me...

i have created this easy way:

$size = FileGetSize("tekst.txt")

While 1

$size1 = FileGetSize("tekst.txt")

if $size <> $size1 Then

$size = FileGetSize("tekst.txt")

msgbox(0,"",$size)

EndIf

Wend

Low solution but the script keeps on running while the file has been changed.

cheers

Justmobile

ps. by example i have give the possible solution to say do i need check every xx sec. but this isn't necessary. Sorry for the misunderstanding in this.

Edited by Justmobile

Share this post


Link to post
Share on other sites

You could keep the script you have and if you want it to leave the loop if the file is the same, just throw in an ExitLoop. You should also throw in a Sleep() so your don't overload your processor. This will keep it from eating all your system resources. Hope this helps!

*** Matt @ MPCS

Share this post


Link to post
Share on other sites

yep that's the new issue, to prevent overload and looping arround , other way's other that looping?.

i need serveral file's to check and if one of those wil changed the script must do the action to add al the contents of the given file to one new file. thats the case ..

cheers

justmobile

Share this post


Link to post
Share on other sites

I know that with my code example provided above, you can do what you are looking for. To support multiple files I would look at using either a text file or an INI configuration file. Looping through the file and checking would just go into the master loop. This would be a reletivly simple task to accomplish.

*** Matt @ MPCS

Share this post


Link to post
Share on other sites

No. No other way.

If you want make an action more than once you need looping!

Share this post


Link to post
Share on other sites

what about funtion TimerInit()?, with the compiler i use (beta with gui support) it don't reconise so do i

cheers

Justmobile

Share this post


Link to post
Share on other sites

thanks, updated!..

it works..

:)

cheers

Justmobile

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0