如何将文本文件作为构建的一部分?

时间:2013-05-22 21:27:44

标签: vb.net build

我编写了一个从文本文件中读取的程序,可以创建它们来加载和保存数据。我有一些文件是程序启动时加载的“默认”数据。这些文件由静态引用加载。我的代码在发布之前运行正常,但很明显,当我发布它时,静态引用不再有效。我不知道如何将默认数据添加到构建中作为不同的文本文件,以便我仍然可以在构建后引用它。

我想能够构建程序并拥有一些随可执行文件一起使用的文件夹,其中包含我可以轻松引用的默认数据文件,但我不知道该怎么做(或者如果有的话)更好的方式)。

下面是我用来从文件中读取的代码的开头。目前,默认数据的文件名被静态传递到子文件中,用于标识要读取的文件,所以我想要一个已发布的文件,我可以做同样的事情。

Try
    Dim sr As New IO.StreamReader(FileName)
    Dim strLine As String = ""

    Do Until sr.EndOfStream
        strLine = sr.ReadLine
        'Code that interprets the data in the file

注意:我尝试将文件添加为“资源”,但我似乎无法将该文件作为文本文件引用;我只能检索文档中包含的大量文本墙,这些文本不能与上面的代码一起使用(除非我当然缺少某些内容)。

如果你能澄清一下:

  1. 如何将文件添加到构建中,以便我仍然可以访问它 统称为文件名?
  2. 我的代码将如何引用文件(例如,通过 最终构建中的“My.Resources.filename”?)?

1 个答案:

答案 0 :(得分:8)

您可以将文件作为内容文件或嵌入资源添加到构建中。

对于内容文件,将文件的构建操作设置为“内容”,并将文件属性中的“复制到输出目录”设置为“始终复制”。然后,您可以像这样访问文件:

FileName = Application.StartupPath() = + FileName
Dim sr As New IO.StreamReader(FileName)
...

要将文件作为资源嵌入,您必须将文件的构建操作设置为“嵌入式资源”并将“复制到输出目录”设置为false。 这个Microsoft support page有关于访问嵌入式资源的一些看法。代码将是这样的:

Dim sr As StreamReader
Dim thisAssembly As Assembly
thisAssembly = Assembly.GetExecutingAssembly()
sr = New StreamReader(thisAssembly.GetManifestResourceStream("NameSpace." + FileName))

Dim strLine As String = ""
Do Until sr.EndOfStream
    strLine = sr.ReadLine
    'Code that interprets the data in the file
    ...

NameSpace替换为您的应用程序的命名空间(项目属性 - >应用程序 - >根命名空间)

您还必须在代码文件的顶部添加Imports System.Reflection

使用嵌入式资源的优势在于管理的文件较少,而且您无需跟踪路径。