# Visual Basic > Visual Basic FAQs >  Classic VB - How can I read/write a text file?

## dee-u

You can read from (or write to) a text file using the Open statement, Close statement and various other statements for actually reading/writing.

The Open statement has clauses for what type of access you want to the file, so you can specify if you want to read it as text, write to it as binary, and so on.  You can also set locking options, to stop other programs from opening the file.  For more details, go to the Index of VB help and see "Open statement".

For all of these file access functions you need to specify a file number, which most people use 1 for.  You should always use a number which is not already in use (as using the same will cause an error), luckily the next free number can be found using the FreeFile function as in the example below.

An example of reading a file:

VB Code:
Dim sFileText as String
Dim iFileNo as Integer
  iFileNo = FreeFile
      'open the file for reading
  Open "C:\Test.txt" For Input As #iFileNo
'change this filename to an existing file!  (or run the example below first)
       'read the file until we reach the end
  Do While Not EOF(iFileNo)
    Input #iFileNo, sFileText
      'show the text (you will probably want to replace this line as appropriate to your program!)
    MsgBox sFileText
  Loop
       'close the file (if you dont do this, you wont be able to open it again!)
  Close #iFileNo
(note: an alternative to _Input #_ is _Line Input #_ , which reads whole lines).


An example of writing a file:

VB Code:
Dim sFileText as String
Dim iFileNo as Integer
  iFileNo = FreeFile
      'open the file for writing
  Open "C:\Test.txt" For Output As #iFileNo
'please note, if this file already exists it will be overwritten!
       'write some example text to the file
  Print #iFileNo, "first line of text"
  Print #iFileNo, "   second line of text"
  Print #iFileNo, ""  'blank line
  Print #iFileNo, "some more text!"
       'close the file (if you dont do this, you wont be able to open it again!)
  Close #iFileNo
(note: an alternative to _Print #_ is _Write #_ , which adds commas between items, and also puts the " character around strings).



You can read files in a much faster way too, by simply loading the entire file at once.  To do this you need to use binary mode, like so:

VB Code:
Function FileText(ByVal filename As String) As String
    Dim handle As Integer
     
       ' ensure that the file exists
    If Len(Dir$(filename)) = 0 Then
        Err.Raise 53  ' File not found
    End If
     
       ' open in binary mode
    handle = FreeFile
    Open filename$ For Binary As #handle
       ' read the string and close the file
    FileText = Space$(LOF(handle))
    Get #handle, , FileText
    Close #handle
End Function


Reading/writing files can also be acheived using FSO (FileSystemObject) as shown below. Please note that using FSO requires an extra reference (under "Project"->"References"), and therefore extra files to be installed with your application.

VB Code:
Option Explicit
'Set a reference to "Microsoft Scripting Runtime"
Private Sub Command1_Click()
       'declare and initiate required objects
    Dim fs As FileSystemObject
    Dim ts As TextStream
     
    Set fs = New FileSystemObject
        'To write
    Set ts = fs.OpenTextFile("C:\mytestfile.txt", ForWriting, True)
    ts.WriteLine "I Love"
    ts.WriteLine "VB Forums"
    ts.Close
     
      'To Read
    If fs.FileExists("C:\mytestfile.txt") Then
        Set ts = fs.OpenTextFile("C:\mytestfile.txt")
         
        Do While Not ts.AtEndOfStream
            MsgBox ts.ReadLine
        Loop
        ts.Close
    End If
        'clear memory used by FSO objects
    Set ts = Nothing
    Set fs = Nothing
End Sub

----------

