Dan Donoghue
Dan Donoghue

Reputation: 6216

How do I store a text file inside a VB.net project?

I have built a basic VB app in the latest visual studio community. It's a simple app to load a text file into a list box then allow the list to be filtered down and finally the selected value to be copied.

It all works fine but I am curious, if I want to distribute this to other users I need to send them the text file (and the location is currently hard coded).

There has to be a better way to do this, do I need to import the text file as some sort of object in my project so it is then part of the project as opposed to a text file on its own?

Here is my code:

Public Class Form1
    Dim MyArray() As String = My.Computer.FileSystem.ReadAllText("C:\Temp\Products.txt").Split(Environment.NewLine)

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ListBox1.DataSource = MyArray
    End Sub

    Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
        TextBox2.Text = ListBox1.SelectedValue
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Clipboard.Clear()
        Clipboard.SetText(TextBox2.Text)
    End Sub

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        Dim FilteredArray(0) As String
        Dim ProdName As String
        Dim X As Long = 0
        ListBox1.DataSource = MyArray
        For Each ProdName In ListBox1.Items
            If InStr(UCase(ProdName), UCase(TextBox1.Text)) > 0 Then
                ReDim Preserve FilteredArray(X)
                FilteredArray(X) = ProdName
                X = X + 1
            End If
        Next
        ListBox1.DataSource = FilteredArray
    End Sub
End Class

Any help is appreciated.

For completeness, here is my final solution:

Imports System.IO
Imports System.Reflection

Public Class Form1
    Dim MyArray() As String
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Using sr As StreamReader = New StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("WindowsApplication2.Products.txt"))
            MyArray = Split(sr.ReadToEnd(), vbLf)
        End Using
        ListBox1.DataSource = MyArray
    End Sub

    Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
        TextBox2.Text = ListBox1.SelectedValue
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Clipboard.Clear()
        Clipboard.SetText(TextBox2.Text)
    End Sub

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        Dim FilteredArray(0) As String
        Dim ProdName As String
        Dim X As Long = 0
        ListBox1.DataSource = MyArray
        For Each ProdName In ListBox1.Items
            If InStr(UCase(ProdName), UCase(TextBox1.Text)) > 0 Then
                ReDim Preserve FilteredArray(X)
                FilteredArray(X) = ProdName
                X = X + 1
            End If
        Next
        ListBox1.DataSource = FilteredArray
    End Sub
End Class

Upvotes: 0

Views: 1882

Answers (1)

Michael Kokorin
Michael Kokorin

Reputation: 504

I think is a good way to store such file is resources of assembly. Include your file into project. Set Build Action to Embedded Resource and then this file will be store inside the assembly. How to read resource file from assembly you can find here: How to read embedded resource text file

Upvotes: 1

Related Questions