Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. Visual Basic
  4. I am trying to port this code from VBScript to C#

I am trying to port this code from VBScript to C#

Scheduled Pinned Locked Moved Visual Basic
csharphelpquestioncareer
14 Posts 7 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    Steve Messer
    wrote on last edited by
    #1

    Unfortunately I am not familiar with any languages with a "V" in name...

    Function zGetFolder( sFolder )
    On Error Resume Next
    Set zGetFolder = oFso.GetFolder( sFolder )
    If Err.Number <> 0 Then
    Wscript.Echo "Error connecting to: " & sFolder & VBlf & "[" & Err.Number & "]" & Err.Description
    Wscript.Quit Err.Number
    End If
    End Function

    Questions: The line I don't understand is: Set zGetFolder = oFso.GetFolder(sFolder) Why would you "Set" a call to oFso.GetFolder with "zGetFolder" the name of the function you are currently in??? I am also not quite sure what "On Error Resume Next" accomplishes with this construct.

    D O 2 Replies Last reply
    0
    • S Steve Messer

      Unfortunately I am not familiar with any languages with a "V" in name...

      Function zGetFolder( sFolder )
      On Error Resume Next
      Set zGetFolder = oFso.GetFolder( sFolder )
      If Err.Number <> 0 Then
      Wscript.Echo "Error connecting to: " & sFolder & VBlf & "[" & Err.Number & "]" & Err.Description
      Wscript.Quit Err.Number
      End If
      End Function

      Questions: The line I don't understand is: Set zGetFolder = oFso.GetFolder(sFolder) Why would you "Set" a call to oFso.GetFolder with "zGetFolder" the name of the function you are currently in??? I am also not quite sure what "On Error Resume Next" accomplishes with this construct.

      D Offline
      D Offline
      Dave Kreskowiak
      wrote on last edited by
      #2

      In VBScript, if a function returns an instance of a class or any object, you have to SET the variable to that instance. Also, "On Error Resume Next" is error handling, which would be a try/catch block in C#. Resume Next just tells VB to continue executing code even if an error occurs. It also sets the values of the Err object if an error does occur. Basically, all that code boils down to this in C#:

      var zGetFolder = new DirectoryInfo(sFolder);
      

      You can find the documentation on the DirectoryInfo class here[^].

      Asking questions is a skill CodeProject Forum Guidelines Google: C# How to debug code Seriously, go read these articles.
      Dave Kreskowiak

      S Richard DeemingR 2 Replies Last reply
      0
      • D Dave Kreskowiak

        In VBScript, if a function returns an instance of a class or any object, you have to SET the variable to that instance. Also, "On Error Resume Next" is error handling, which would be a try/catch block in C#. Resume Next just tells VB to continue executing code even if an error occurs. It also sets the values of the Err object if an error does occur. Basically, all that code boils down to this in C#:

        var zGetFolder = new DirectoryInfo(sFolder);
        

        You can find the documentation on the DirectoryInfo class here[^].

        Asking questions is a skill CodeProject Forum Guidelines Google: C# How to debug code Seriously, go read these articles.
        Dave Kreskowiak

        S Offline
        S Offline
        Steve Messer
        wrote on last edited by
        #3

        Thanks for the explanation. What you said makes perfect sense. I still don't understand why you would do this: Set zGetFolder = oFso.GetFolder( sFolder ) When zGetFolder is the name of the function that line of code is in. Does this zGetFolder only exist in the scope of the function?

        M L R D 5 Replies Last reply
        0
        • S Steve Messer

          Thanks for the explanation. What you said makes perfect sense. I still don't understand why you would do this: Set zGetFolder = oFso.GetFolder( sFolder ) When zGetFolder is the name of the function that line of code is in. Does this zGetFolder only exist in the scope of the function?

          M Offline
          M Offline
          Mycroft Holmes
          wrote on last edited by
          #4

          I think you'll find that the function is designed to return the folder to the calling method. Therefore

          Steve Messer wrote:

          Set zGetFolder = oFso.GetFolder( sFolder )

          should return the folder (it will be a variable in the calling function).

          Never underestimate the power of human stupidity RAH

          1 Reply Last reply
          0
          • S Steve Messer

            Thanks for the explanation. What you said makes perfect sense. I still don't understand why you would do this: Set zGetFolder = oFso.GetFolder( sFolder ) When zGetFolder is the name of the function that line of code is in. Does this zGetFolder only exist in the scope of the function?

            L Offline
            L Offline
            Lost User
            wrote on last edited by
            #5

            Steve Messer wrote:

            When zGetFolder is the name of the function that line of code is in.

            No they are different. The resulting variable is named zGetFolder (leading z), but the function is named GetFolder (no leading z).

            1 Reply Last reply
            0
            • S Steve Messer

              Thanks for the explanation. What you said makes perfect sense. I still don't understand why you would do this: Set zGetFolder = oFso.GetFolder( sFolder ) When zGetFolder is the name of the function that line of code is in. Does this zGetFolder only exist in the scope of the function?

              L Offline
              L Offline
              Lost User
              wrote on last edited by
              #6

              Steve Messer wrote:

              When zGetFolder is the name of the function that line of code is in.

              That is how a function returns data to its caller. The name of the function is an alias for the name of the variable to return. So setting the name in that way, the caller of the function will receive the value obtained by GetFolder.

              1 Reply Last reply
              0
              • S Steve Messer

                Thanks for the explanation. What you said makes perfect sense. I still don't understand why you would do this: Set zGetFolder = oFso.GetFolder( sFolder ) When zGetFolder is the name of the function that line of code is in. Does this zGetFolder only exist in the scope of the function?

                R Offline
                R Offline
                Ralf Meier
                wrote on last edited by
                #7

                The GetFolder-Method comes from oFso. This must be declared somewhere else and means the FileSystemObject (Example : Set FSO = CreateObject("Scripting.FileSystemObject") ). If you come from VBScript you will find a lot of differences (not only with the Code-Syntax) to .Net (it is independant if you take VB.NET or C#.Net).

                1 Reply Last reply
                0
                • D Dave Kreskowiak

                  In VBScript, if a function returns an instance of a class or any object, you have to SET the variable to that instance. Also, "On Error Resume Next" is error handling, which would be a try/catch block in C#. Resume Next just tells VB to continue executing code even if an error occurs. It also sets the values of the Err object if an error does occur. Basically, all that code boils down to this in C#:

                  var zGetFolder = new DirectoryInfo(sFolder);
                  

                  You can find the documentation on the DirectoryInfo class here[^].

                  Asking questions is a skill CodeProject Forum Guidelines Google: C# How to debug code Seriously, go read these articles.
                  Dave Kreskowiak

                  Richard DeemingR Offline
                  Richard DeemingR Offline
                  Richard Deeming
                  wrote on last edited by
                  #8

                  Dave Kreskowiak wrote:

                  Basically, all that code boils down to this in C#:

                  Almost. :) The GetFolder Method[^] generates an error if the folder doesn't exist. The DirectoryInfo constructor doesn't. You'd need to check the Exists property, and either display a message or throw an exception if it returns False.


                  "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

                  "These people looked deep within my soul and assigned me a number based on the order in which I joined" - Homer

                  D 1 Reply Last reply
                  0
                  • Richard DeemingR Richard Deeming

                    Dave Kreskowiak wrote:

                    Basically, all that code boils down to this in C#:

                    Almost. :) The GetFolder Method[^] generates an error if the folder doesn't exist. The DirectoryInfo constructor doesn't. You'd need to check the Exists property, and either display a message or throw an exception if it returns False.


                    "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

                    D Offline
                    D Offline
                    Dave Kreskowiak
                    wrote on last edited by
                    #9

                    Yeah, I know. There are other issues with the OP's understanding that I just didn't directly address because of time.

                    Asking questions is a skill CodeProject Forum Guidelines Google: C# How to debug code Seriously, go read these articles.
                    Dave Kreskowiak

                    1 Reply Last reply
                    0
                    • S Steve Messer

                      Thanks for the explanation. What you said makes perfect sense. I still don't understand why you would do this: Set zGetFolder = oFso.GetFolder( sFolder ) When zGetFolder is the name of the function that line of code is in. Does this zGetFolder only exist in the scope of the function?

                      D Offline
                      D Offline
                      Dave Kreskowiak
                      wrote on last edited by
                      #10

                      zGetFolder is NOT the name of a function. It's just a variable holding a value or, in this case, and object returned by the call to the GetFolder() function. The GetFolder() function is a member of the FileSystemObject class instance that the variable oFso holds.

                      Asking questions is a skill CodeProject Forum Guidelines Google: C# How to debug code Seriously, go read these articles.
                      Dave Kreskowiak

                      S 1 Reply Last reply
                      0
                      • D Dave Kreskowiak

                        zGetFolder is NOT the name of a function. It's just a variable holding a value or, in this case, and object returned by the call to the GetFolder() function. The GetFolder() function is a member of the FileSystemObject class instance that the variable oFso holds.

                        Asking questions is a skill CodeProject Forum Guidelines Google: C# How to debug code Seriously, go read these articles.
                        Dave Kreskowiak

                        S Offline
                        S Offline
                        Steve Messer
                        wrote on last edited by
                        #11

                        So basically: 1. 'On Error Resume Next' turns on user error handling as the default behavior is to exit on errors 2. If the call to oFso.GetFolder returns an error the function will Echo out the error code and continue execution instead of the normal behavior of exiting This would make since as this is part of an ETL process which is just copying backups to a shared drive. The process doesn't need to stop if the shared drive is unavailable for some reason. Thanks everyone!

                        Richard DeemingR 1 Reply Last reply
                        0
                        • S Steve Messer

                          So basically: 1. 'On Error Resume Next' turns on user error handling as the default behavior is to exit on errors 2. If the call to oFso.GetFolder returns an error the function will Echo out the error code and continue execution instead of the normal behavior of exiting This would make since as this is part of an ETL process which is just copying backups to a shared drive. The process doesn't need to stop if the shared drive is unavailable for some reason. Thanks everyone!

                          Richard DeemingR Offline
                          Richard DeemingR Offline
                          Richard Deeming
                          wrote on last edited by
                          #12

                          Steve Messer wrote:

                          the function will Echo out the error code and continue execution instead of the normal behavior of exiting

                          Not quite. The Wscript.Quit Err.Number line following the Wscript.Echo ... line will cause the script to quit, with no possibility for error handling code further up the stack to handle the error.


                          "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

                          "These people looked deep within my soul and assigned me a number based on the order in which I joined" - Homer

                          S 1 Reply Last reply
                          0
                          • Richard DeemingR Richard Deeming

                            Steve Messer wrote:

                            the function will Echo out the error code and continue execution instead of the normal behavior of exiting

                            Not quite. The Wscript.Quit Err.Number line following the Wscript.Echo ... line will cause the script to quit, with no possibility for error handling code further up the stack to handle the error.


                            "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

                            S Offline
                            S Offline
                            Steve Messer
                            wrote on last edited by
                            #13

                            I didn't notice Wscript.Quit, In my mind I just saw to lines with Echo. That takes all the mysteries out. Thanks again!!

                            1 Reply Last reply
                            0
                            • S Steve Messer

                              Unfortunately I am not familiar with any languages with a "V" in name...

                              Function zGetFolder( sFolder )
                              On Error Resume Next
                              Set zGetFolder = oFso.GetFolder( sFolder )
                              If Err.Number <> 0 Then
                              Wscript.Echo "Error connecting to: " & sFolder & VBlf & "[" & Err.Number & "]" & Err.Description
                              Wscript.Quit Err.Number
                              End If
                              End Function

                              Questions: The line I don't understand is: Set zGetFolder = oFso.GetFolder(sFolder) Why would you "Set" a call to oFso.GetFolder with "zGetFolder" the name of the function you are currently in??? I am also not quite sure what "On Error Resume Next" accomplishes with this construct.

                              O Offline
                              O Offline
                              oblondel
                              wrote on last edited by
                              #14

                              Hi, I think, it's because of visual basic sripting (which is equal to VB 6) The "SET" is for instancing the fso object ofso (Filesystem object i guess) The on error resume next is a poor "try catch" implementation.

                              1 Reply Last reply
                              0
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              • Login

                              • Don't have an account? Register

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • World
                              • Users
                              • Groups