Using the File System Object (FSO)

The following code includes a set of complex and simple functions to serve as examples of the possible uses and applications of Microsoft FSO.

dim oFSO

' Create the file system object

set oFSO = CreateObject ("Scripting.FileSystemObject")

'Option Explicit

' *******************************************************************************************

' Create a new txt file

' Parameters:

' FilePath - location of the file and its name

' *******************************************************************************************

Function CreateFile (FilePath)

       ' Variable that will hold the new file object

       dim NewFile

       ' Create the new text ile

       set NewFile = oFSO.CreateTextFile(FilePath, True)

       set CreateFile = NewFile

       End Function

' *******************************************************************************************

' Check if a specific file exist

' Parameters:

' FilePath - Location of the file and its name

' *******************************************************************************************

Function CheckFileExists (FilePath)

       ' Check if the file exists

       CheckFileExists = oFSO.FileExists(FilePath)

End Function

' *******************************************************************************************

' Write data to file

' Parameters:

' FileRef - Reference to the file

' str - Data to be written to the file

*******************************************************************************************

Function WriteToFile (byref FileRef,str)

       ' Write str to the text file

       FileRef.WriteLine(str)

End Function

' *******************************************************************************************

' Read line from file

' Parameters:

' FileRef - reference to the file

' *******************************************************************************************

Function ReadLineFromFile (byref FileRef)

       ' Read line from text file

       ReadLineFromFile = FileRef.ReadLine

End Function

' *******************************************************************************************

' Closes an open file.

' Parameters:

' FileRef - Reference to the file

' *******************************************************************************************

Function CloseFile (byref FileRef)

       FileRef.close

End Function

'******************************************************************************************

' Opens a specified file and returns an object that can be used to

' read from, write to, or append to the file.

' Parameters:

' FilePath - Location of the file and its name

' mode options are:

' ForReading - 1

' ForWriting - 2

' ForAppending - 8

' *******************************************************************************************

Function OpenFile (FilePath,mode)

' Open the txt file and return the File object

set OpenFile = oFSO.OpenTextFile(FilePath, mode, True)

End Function

' *******************************************************************************************

' Closes an open file.

' Parameters:

' FilePathSource - Location of the source file and its name

' FilePathDest - Location of the destination file and its name

' *******************************************************************************************

Sub FileCopy ( FilePathSource,FilePathDest)

       ' copy source file to destination file

       oFSO.CopyFile FilePathSource, FilePathDest

End Sub

' *******************************************************************************************

' Delete a file.

' Parameters:

' FilePath - Location of the file to be deleted

' *******************************************************************************************

Sub FileDelete ( FilePath)

       ' Copy source file to destination file

       oFSO.DeleteFile ( FilePath)

End Sub

' *******************************************************************************************

' Compare two text files.

'

' Parameters:

' FilePath1 - Location of the first file to be compared

' FilePath2 - Location of the second file to be compared

' FilePathDiff - Location of the differences file

' ignoreWhiteSpace - Controls whether or ignore differences in white space characters

' true - Ignore differences in white space

' false - Do not ignore difference in white space

' Return Value: true if files are identical, false otherwise'

' *******************************************************************************************

Function FileCompare (byref FilePath1, byref FilePath2, byref FilePathDiff, ignoreWhiteSpace)

       dim differentFiles

       differentFiles = false

       dim f1, f2, f_diff

       ' Open the files

       set f1 = OpenFile(FilePath1,1)

       set f2 = OpenFile(FilePath2,1)

       set f_diff = OpenFile(FilePathDiff,8)

       dim rowCountF1, rowCountF2

       rowCountF1 = 0

       rowCountF2 = 0

       dim str

       ' Count how many lines there are in the first file

       While not f1.AtEndOfStream

              str = ReadLineFromFile(f1)

              rowCountF1= rowCountF1 + 1

       Wend

       ' Count how many lines there are in the second file

       While not f2.AtEndOfStream

              str = ReadLineFromFile(f2)

              rowCountF2= rowCountF2 + 1

       Wend

       ' Re-open the files to go back to the first line in the files

       set f1 = OpenFile(FilePath1,1)

       set f2 = OpenFile(FilePath2,1)

       ' compare the number of lines in the two files.

       ' assign biggerFile - The file that contain more lines

       ' assign smallerFile - The file that contain fewer lines

       dim biggerFile, smallerFile

       set biggerFile = f1

       set smallerFile = f2

       If ( rowCountF1 < rowCountF2) Then

              set smallerFile = f1

              set biggerFile = f2

       End If

       dim lineNum,str1, str2

       lineNum = 1

       str = "Line" & vbTab & "File1" & vbTab & vbTab & "File2"

       WriteToFile f_diff,str

       ' Loop on all the lines in the smaller file

       While not smallerFile.AtEndOfStream

              ' read line from both files

              str1 = ReadLineFromFile(f1)

              str2 = ReadLineFromFile(f2)

       ' Check if we need to ignore white spaces, if yes, trim the two lines

       If Not ignoreWhiteSpace Then

              Trim(str1)

              Trim(str2)

       End If

       ' If there is a difference between the two lines, write them to the differences file

       If not (str1 = str2) Then

              differentFiles = true

              str = lineNum & vbTab & str1 & vbTab & vbTab & str2

              WriteToFile f_diff,str

       End If

       lineNum = lineNum + 1

       Wend

       ' Loop through the bigger lines, to write its line to the different file

       While not biggerFile.AtEndOfStream

              str1 = ReadLineFromFile(biggerFile)

              str = lineNum & vbTab & "" & vbTab & vbTab & str2

              WriteToFile f_diff,str

              lineNum = lineNum + 1

       Wend

       FileCompare = Not differentFiles

End function

' ************** Example of using these functions **********************

FilePath1 = "D:\temp\FSO\txt1.txt"

FilePath2 = "D:\temp\FSO\txt2.txt"

FilePathDiff = "D:\temp\FSO\txt_diff.txt"

d = FileCompare(FilePath1,FilePath2,FilePathDiff,false)

FilePath = "D:\temp\FSO\txt.txt"

set fold = FolderCreate ( "D:\temp\FSO

set f = OpenFile(FilePath,8)

' = WriteToFile(f,"test line")

d = CloseFile(f)

set f = CreateFile(FilePath)

Fexist= CheckFileExists(FilePath)

d = WriteToFile(f,"first line")

d = WriteToFile(f,"second line")

d = CloseFile(f)

FileCopy "D:\temp\FSO\txt.txt","D:\temp\FSO\txt1.txt"

FileDelete "D:\temp\FSO\txt1.txt"

No comments: