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. The examples can be found in the UsingFSO.vbs file located in the <Installdir>\CodeSamplesPlus folder.

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 file
	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
' *******************************************************************************************
' Copy 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 **********************

FolderPath = "C:\temp\FSO"
FilePath = "C:\temp\FSO\txt." 
FilePath1 = "C:\temp\FSO\txt1.txt" 
FilePath2 = "C:\temp\FSO\txt2.txt" 
FilePathDiff = "C:\temp\FSO\txt_diff.txt"  

If (oFSO.FolderExists(FolderPath)) Then
	 Reporter.ReportEvent 0, "Folder Exists Step", FolderPath & " folder existed before."
	  if( CheckFileExists(FilePath) ) Then
	        FileDelete FilePath
			Reporter.ReportEvent 0, "File Exists Step", FilePath & " file was deleted"
	 End If
	 if( CheckFileExists(FilePath1) ) Then
	        FileDelete FilePath1
			Reporter.ReportEvent 0, "File Exists Step", FilePath1 & " file was deleted"
	 End If
	 if( CheckFileExists(FilePath2) ) Then
	        FileDelete FilePath2 
			Reporter.ReportEvent 0, "File Exists Step", FilePath2 & " file was deleted"
	 End If
	 if( CheckFileExists(FilePathDiff) ) Then
	        FileDelete FilePathDiff
			Reporter.ReportEvent 0, "File Exists Step", FilePathDiff & " file was deleted"
	 End If
Else
      Set fold = oFSO.CreateFolder(FolderPath)
	  Reporter.ReportEvent 0, "Folder Exists Step", FolderPath & " folder was created"
End If

set f = CreateFile(FilePath) 

if( CheckFileExists(FilePath) ) Then
     Reporter.ReportEvent 0, "File Exists Step", FilePath & " file was created"
End If

WriteToFile f,"first line"
WriteToFile f,"second line" 
CloseFile f 

set f = CreateFile(FilePath2) 
CloseFile f 

set f = OpenFile(FilePath2,2) 
 WriteToFile f,"test line"  
CloseFile f

FileCopy FilePath, FilePath1
if(FileCompare(FilePath1,FilePath2,FilePathDiff,false)) Then 
     Reporter.ReportEvent 1, "Files Compare Step", FilePath1 & FilePath2 &" files are identical, but should not be"
Else
     Reporter.ReportEvent 0, "Files Compare Step", FilePath1 & " & " & FilePath2 &" have difference." 
End if