Diciamo che stai sbagliando il metodo.
Il mio consiglio è quello si di creare una struttura come hai fatto, popolare un'arrayList con la/le strutture create e serializzare il tutto. In questo modo non hai il problema dell'accodamento del file e non hai il problema di recuperare le password quando deserializzi.

Quindi:

codice:
 Dim myList As New ArrayList

    <Serializable()> _
    Structure PWD
        Dim Programma As String
        Dim Username As String
        Dim Password As String

        Sub New(ByVal programma As String, ByVal username As String, ByVal password As String)
            Me.Programma = programma
            Me.Password = password
            Me.Username = username
        End Sub
    End Structure

    Sub AddItem()
        Dim myPWD As New PWD("mioProgramma", "MioUsername", "miaPassword")
        myList.Add(myPWD)
        myPWD = New PWD("mioProgramma2", "MioUsername2", "miaPassword2")
        myList.Add(myPWD)
        myList.TrimToSize()
        Dim stream As FileStream = File.Open("C:\mioFile.bin", FileMode.Create)
        Dim formatter As New BinaryFormatter()
        formatter.Serialize(stream, myList)
        stream.Close()
    End Sub

Quando recuperi:

è
codice:
   Sub Deserialize()
        Dim lista As ArrayList
        Dim stream As FileStream = File.Open("C:\mioFile.bin", FileMode.Open)
        Dim formatter As New BinaryFormatter()
        lista = formatter.Deserialize(Stream)
        stream.Close()
    End Sub

Scusa per la frettolosità del codice.