7

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

我想能够构建程序并拥有某种伴随可执行文件的文件夹,其中包含我可以轻松引用的默认数据文件,但我不知道该怎么做(或者是否有更好的方法) .

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

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”?)?
4

1 回答 1

10

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

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

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

要将文件嵌入为资源,您必须将文件的构建操作设置为“嵌入资源”并将复制到输出目录设置为 false。此Microsoft 支持页面包含有关访问嵌入式资源的演练。代码将是这样的:

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在代码文件的顶部添加。

使用嵌入式资源的优点是管理的文件更少,并且您不必跟踪路径。

于 2013-05-23T01:33:25.273 回答