我编写了一个从文本文件中读取的程序,可以创建它们来加载和保存数据.我有一些文件是程序启动时加载的“默认”数据.这些文件由静态引用加载.我的代码在发布之前运行正常,但很明显,当我发布它时,静态引用不再有效.我不知道如何将默认数据添加到构建中作为不同的文本文件,以便我仍然可以在构建后引用它.
我想能够构建程序并拥有一些随可执行文件一起提供的文件夹,其中包含我可以轻松引用的默认数据文件,但我不知道该怎么做(或者如果有更好的方法) .
下面是我用来从文件中读取的代码的开头.目前,默认数据的文件名是静态传递到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
注意:我尝试将文件添加为“资源”,但我似乎无法将该文件作为文本文件引用;我只能检索文档中包含的大量文本墙,这些文本不能与上面的代码一起使用(除非我当然缺少某些内容).
如果你能澄清一下:
>如何将文件添加到构建中,以便我仍然可以访问它
统称为文件名?
>我的代码将如何引用文件(例如,通过
最终构建中的“My.Resources.filename”?)?
您可以将文件作为内容文件或嵌入资源添加到构建中.
原文链接:https://www.f2er.com/vb/255009.html对于内容文件,将文件的构建操作设置为“内容”,将“复制到输出目录”设置为文件属性中的“始终复制”.然后,您可以像这样访问该文件:
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.
使用嵌入式资源具有管理文件较少的优点,您无需跟踪路径.