Differences

This shows you the differences between the selected revisions of the page.

2012-03-20 2012-03-20
option explicit (martin) error handling in vbscript (martin)
Line 70: Line 70:
Set session = WScript.CreateObject("WinSCP.Session", "session_") Set session = WScript.CreateObject("WinSCP.Session", "session_")
 +</code>
 +
 +==== [[vberror]] Error Handling in VBScript ====
 +VBScript does not support catching exceptions, what is a common way of handling errors in examples for most other languages.
 +
 +In case you need to use custom error handling, instead of aborting the script on error (the default for WSH), use ''[[http://msdn.microsoft.com/en-us/library/53f3k80h(v=vs.85).aspx|On Error]]'' statement.
 +
 +Use ''On Error Resume Next'' to disable default error handling. Then you need to query ''[[http://msdn.microsoft.com/en-us/library/sbf5ze0e(v=vs.85).aspx|Err.Number]]'' after every statement to test for errors. You can revert to default error handling (aborting the script) using ''On Error GoTo 0''.
 +
 +<code vb>
 +' Enable custom error handling
 +On Error Resume Next
 +
 +' Now, with custom error handling enabled,
 +' script does not abort, when opening session fails
 +session.Open sessionOptions
 +
 +' Query for errors
 +If Err.Number <> 0 Then
 +    WScript.Echo "Error opening session: " & Err.Description
 +    WScript.Quit 1
 +End If
 +
 +' Clear the error
 +Err.Clear
 +
 +' Restore default error handling
 +On Error GoTo 0
 +
 +' Now, with default error handling restored,
 +' script aborts, if reading remote directory fails
 +Dim directoryInfo
 +Set directoryInfo = session.ListDirectory("/home/user/")
 +</code>
 +
 +If you do not want to test for errors after every statement, you need to group the staments you want to guard into a subprocedure and enable custom error handling before calling/entering the subprocedure:
 +
 +<code vb>
 +Sub ListDirectory
 +    ...
 +    session.Open sessionOptions
 +
 +    Dim directoryInfo
 +    Set directoryInfo = session.ListDirectory("/home/user/")
 +    ...
 +End Sub
 +
 +' Enable custom error handling
 +On Error Resume Next
 +
 +' Now, with custom error handling enabled before calling the ListDirectory subprocedure,
 +' any statement in the subprocedure terminates the subprocedure (but not the whole script)
 +ListDirectory
 +
 +' Query for errors
 +If Err.Number <> 0 Then
 +    WScript.Echo "Listing directory failed: " & Err.Description
 +    WScript.Quit 1
 +End If
 +
 +' Clear the error
 +Err.Clear
 +
 +' Restore default error handling
 +On Error GoTo 0
</code> </code>
Line 115: Line 180:
===== [[vbscript]] VBScript Example ===== ===== [[vbscript]] VBScript Example =====
-This example is functionally equivalent to [[library#example|overall C# example for WinSCP .NET assembly]].+This example is functionally equivalent to [[library#example|overall C# example for WinSCP .NET assembly]], except for [[library_com_wsh#vberror|error handling]].
There are also [[library_examples|other VBScript examples]]. There are also [[library_examples|other VBScript examples]].

Last modified: by martin