Sign in to follow this  
Followers 0


1 post in this topic

Hi All, 
I went searching for something to speed up checking for files on the network (UNC Paths)

Most examples were rather complicated but someones multi-threaded solution gave me an idea.

Hope it is useful to someone.

Seems to work well so far. 

Func _FileExistsTimeout($sPath, $iTimeout = 1000)
    Local $hTimer = TimerInit() ; Begin the timer and store the handle in a variable.
    Local $iPID = Run(@AutoItExe & ' /AutoIt3ExecuteLine  "ConsoleWriteError(FileExists(""' & $sPath & '""))"', @ScriptDir, @SW_HIDE, $STDERR_CHILD)
    Local $sOutput = ""
    Local $iDiff = 0
    While $iDiff < $iTimeout
        $iDiff = TimerDiff($hTimer)
        $sOutput &= StderrRead($iPID)
        If @error Then ; Exit the loop if the process closes or StderrRead returns an error.
    Switch StringStripWS($sOutput, 8)
        Case 1
            Return True
        Case Else
            Return False
EndFunc   ;==>_FileExistsTimeout

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

  • Similar Content

    • ur
      By ur
      I have automated an install process by using the below code.
      Func _WinWaitActivate($title,$text,$timeout=0) WinWait($title,$text,$timeout) If Not WinActive($title,$text) Then WinActivate($title,$text) WinWaitActive($title,$text,$timeout) EndFunc $win1 = "Text 1" $win2 = "Text 2" _WinWaitActivate($win1,"WARNING: This progra") Send("{ALTDOWN}n{ALTUP}");Send("{SPACE}") _WinWaitActivate($win1,"I DISAGREE and &do n") Send("{UP}n") _WinWaitActivate($win1,"Customer Information") Send("{ALTDOWN}n{ALTUP}");Send("{TAB}{TAB}n") _WinWaitActivate($win1,"Click Next to instal") Send("{ALTDOWN}n{ALTUP}");Send("n") _WinWaitActivate($win1,"This feature require") Send("{ALTDOWN}n{ALTUP}");Send("{TAB}n") _WinWaitActivate($win1,"Ready to Install the") Send("{ALTDOWN}i{ALTUP}");Send("i") _WinWaitActivate($win1,"The InstallShield Wi") Send("{ALTDOWN}f{ALTUP}");Send("f") _WinWaitActivate($win2,"You must restart you") Send("{ALTDOWN}n{ALTUP}");Send("n") Now if any new screen comes in the middle of installation, like some VC++ installation error or like that.
      The AutoIT is waiting in the background.
      Is there any way to skip the new screens with just "enter" and continue the installation??
    • Spyderco
      By Spyderco
      Hi everyone

      I'll explain what I'm trying to achieve briefly:

      I run several websites and am running pilots for a new framework on a few server.
      I have a certain script set us like a bunch of checkboxes, one of which checks a URL for it's status response set to a $ClientURL variable.
      So I have something like the following:

      Set includes
      Set variables (one of which is $ClientURL = ("").
      Start loop
         Main script
            If $ClientURL = ("") Then
                $ClientURL = ("")
            If $ClientURL = ("") Then
               $ClientURL = ("")
            ElseIf $ClientURL = ("") Then
               $ClientURL = ("")
            ElseIf $ClientURL = ("") Then
               $ClientURL = ("")
            ElseIf $ClientURL = ("") Then
               $ClientURL = ("")
            Sleep until the script restarts the loop.
      End loop

      This only uses one main script and changes the variables needed to run in by the following value every time.
      My problem is this...
      Everything runs smoothly, but if a webserver takes too long to respond, the program will timeout.
      This doesn't give a certain status, so it doesn't get logged by the script so it can move on to the next one.
      It just freezes and crashes on it eventually.
      Is there a way to add a certain timeout to a line?
      Lets say something like this:
      Func A ()
      $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
      $oHTTP.Open("GET", $ClientURL, False)
      If the time it takes = >10 seconds
         Move on to the next line
         Do nothing

      I thought about making a variable that tracks the system time in seconds that has passed by and resets it at the beginning of every new function,
      but I was hoping there'd be something more efficient...
      Thanks in advance guys!
    • lrstndm
      By lrstndm
      Hi all,
      I want to check if a file exists under the System32 folder: C:\Windows\System32\inetsrv\rewrite.dll
      The following code always worked for me:
      $string = @SystemDir & "\inetsrv\rewrite.dll" ConsoleWrite(FileExists($string)) But yesterday I updated my Windows 10 with the last "big" update and now my @SystemDir returns the following string:
      And before it was:
      So I thought I change my code to:
      $string = @WindowsDir & "\System32\inetsrv\rewrite.dll" ConsoleWrite(FileExists($string)) But this code also does not work. I tried to run it as administrator but this also didn't work.
      What am I doing wrong?
    • chipmonger
      By chipmonger
      Have the following code snippet:
      If not FileExists($ExchangeDir & $StockCSV) Then _FileWriteFromArray($ExchangeDir & $StockCSV, $YahooStockEntries) Else When trying to do a check against the non-existent file 'PRN.csv', FileExists is evaluating as True.  This is not happening with other file names, directory structure is correct.
      Any ideas?
    • GreenCan
      By GreenCan
      Edit 2: Complete rewrite of the function, simplified version using a single function and without use of GUICtrlSetOnEvent or AutoItSetOption. Correct centering of message.
      Edit 1: Updated function to correct possible misbehaving AutoItSetOption.
      MsgBox with Visual CountDown
      Self-explanatory I guess...
      MsgBox_CountDown.au3 (Previous downloads: 53)