Microsoft Scripting Runtime in VB6

The scrrun.dll defines several objects for managing files. These facilities include the FileSystemObject and TextStream classes. FileSystemObject represents your PC's file system and includes such capabilities as creating temporary files, managing directories, and managing files. The TextStream class is defined to represent files as a contiguous stream of text data and makes managing text file content much easier than using the legacy VB Open, Close, Line Input, and other such commands. In this week's article I will demonstrate several of the basic capabilities of the Microsoft Scripting Runtime.

Before we begin, as a reminder you will need to add a reference to the Scripting Runtime library in VB6 from the Project|References menu. (Check the Microsoft Scripting Runtime reference and click OK in the Add References dialog.) The examples will use early bound objects rather than late bound objects using CreateObject, but you can use CreateObject and Variant types to dynamically load external libraries at runtime.

Creating a Temporary File

Sometimes you need to create a temporary file. Perhaps you need to persist the state of an object to the user's PC or make a backup file during a save operation. This example demonstrates how to use the FileSystemObject in the Scripting Runtime library to get a unique temporary file name and copy the contents to the temporary file.

The following Backup function takes a file name and creates a copy of the file using FileSystemObject.CopyFile and FileSystemObject.GetTempName.

Private Sub Backup(ByVal FileName As String)
   Dim FS As New FileSystemObject
   Call FS.CopyFile(FileName, FS.GetTempName)
End Sub

A production application may want to perform some additional steps. You may want to call the FS.FileExists method to ensure that the source file represented by FileName exists, and you may want to copy the backup to a specific location. GetTempName does not create a file nor does it include path information. By default the copy will be created in the VB98 folder where you installed VB unless you specify a path, in addition to the temp file name.

Reading and Writing Text Files

The FileSystemObject, in conjunction with the TextStream class, can be used to manage text files. FileSystemObject.OpenTextFile takes four parameters and returns an instance of a TextStream object, which in turn has some of its own capabilities. Only the FileName is a required parameter of OpenTextFile. FileName represents the file to manage. The second argument, IOMode, is one of three defined constants: ForAppending, ForReading, and ForWriting. The third parameter, Create, is a Boolean. The fourth parameter is one of TriStateFalse, TriStateMixed, TriStateTrue, or TriStateUseDefault.

Each of the four parameters describes how operations behave on the open file. The last three parameters are Optional. If you do not provide an argument for the optional parameters then the default IOMode is ForReading, Create is False, and Format is TristateFalse. The first three arguments are self-explanatory. The fourth argument, Format, indicates whether the contents of the text file are treated as Unicode (16-bit) characters or ASCII (8-bit) characters.

The two examples that follow demonstrate creating a FileSystemObject, opening a text file, and reading or writing, respectively, to the file using the TextStream object.

1:  ' Open a file and add some text using a TextStream object
2:  Private Function ReadTextFile(ByVal FileName As String) As String
3:   
4:    Dim FS As New FileSystemObject
5:    Dim Stream As TextStream
6:   
7:    Call Backup(FileName)
8:    Set Stream = FS.OpenTextFile( _
9:      FileName, ForReading, False)
10:    
11:   ReadTextFile = Stream.ReadAll()
12:   Stream.Close
13:
14:   Set FS = Nothing
15:
16: End Function

The example demonstrates a function that takes a FileName argument and returns all of the contents of a text file. Note the use of the TextStream object on lines 8, 11, and 12. The FileSystemObject is responsible for returning an opened stream object and the TextStream object—named Stream in the listing—actually closes the stream. Writing text to a file requires simply that we pass the name of the file to write to and the text to write, to a subroutine and open the file for writing.

1:  Private Sub WriteTextFile(ByVal FileName As String, ByVal Text As String)
2:  
3:    Dim FS As New FileSystemObject
4:    Dim Stream As TextStream
5:    
6:    Set Stream = FS.OpenTextFile( _
7:      FileName, ForWriting, False)
8:   
9:    Call Stream.Write(Text)
10:   Stream.Close
11:   Set FS = Nothing
12: End Sub

Notice that the code is the WriteTextFile subroutine is only slightly different than the ReadTextFile function. The operations for reading and writing differ only slightly semantically, so then should the implementations necessarily differ only slightly. A final note: A robust implementation might use an On Error Goto label statement to catch errors that may occur in the read or write procedures.

The Microsoft Scripting Runtime offers several classes rich with file system and file content management capabilities. Spend a little time exploring the help documentation before you write file management utilities from scratch. There is a good chance that what you need already exists in the scrrun.dll.

About the Author

Paul Kimmel is a freelance writer for Developer.com and CodeGuru.com. He is the founder of Software Conceptions, Inc, found in 1990. Paul Kimmel is available to help you build Visual Basic.NET solutions. You may contact him at pkimmel@softconcepts.com.



Comments

  • how

    Posted by ninkufuske on 08/26/2004 12:37am

    hi... in this line --> Dim FS As New FileSystemObject i had error message box, say user-defined not defined, how to fix it? thanks regards,

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: December 11, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT Market pressures to move more quickly and develop innovative applications are forcing organizations to rethink how they develop and release applications. The combination of public clouds and physical back-end infrastructures are a means to get applications out faster. However, these hybrid solutions complicate DevOps adoption, with application delivery pipelines that span across complex hybrid cloud and non-cloud environments. Check out this …

  • VMware vCloud® Government Service provided by Carpathia® is an enterprise-class hybrid cloud service that delivers the tried and tested VMware capabilities widely used by government organizations today, with the added security and compliance assurance of FedRAMP authorization. The hybrid cloud is becoming more and more prevalent – in fact, nearly three-fourths of large enterprises expect to have hybrid deployments by 2015, according to a recent Gartner analyst report. Learn about the benefits of …

Most Popular Programming Stories

More for Developers

RSS Feeds