微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VB-写入文件,关闭和对象存在

如何解决VB-写入文件,关闭和对象存在

我正在编写一个程序,该程序在代码的不同位置(例如,不同的子例程,函数或子例程的不同部分(分散))将数据写入文本文件

首先,我Dim文件编写器:

Dim CurrentHisWriter As System.IO.StreamWriter

我告诉它写在哪里:

CurrentHisWriter = New System.IO.StreamWriter("C:\ProgramData\Japanese Conjugation Helper\LastSearch.txt")

然后,我实际上写东西:

CurrentHisWriter.Writeline("thing to write")

问题是我必须更改为另一个子例程,然后继续写入文件,所以我必须关闭编写器,然后在另一个子例程中将另一个变暗:

CurrentHisWriter.Close

NewSubroutine()

[NewSubroutine]:

Dim CurrentHisWriter As System.IO.StreamWriter CurrentHisWriter = New System.IO.StreamWriter("C:\ProgramData\Japanese Conjugation Helper\LastSearch.txt")

但是当我这样做时,我给了我几个错误之一:

  • 程序正在运行文件一个实例
  • 与没有物体有关(我不记得了)

有什么可靠的方法可以对文件进行编程,而不必担心在每次更改子例程时都会关闭写入器。我不确定对象和实例的工作方式,因此,我现在唯一能做的就是在使用“ CurrentHisWriter.Writeline”的每一行上进行一个catch循环,但这实际上也行不通。

我知道我对此一无所知无助于解释,但我尽了最大努力。

解决方法

天真的方法是:

Sub Main()
  MethodA()
  MethodB()
End Sub

Sub MethodA()
  Log("Starting method A")
End Sub

Sub MethodB()
  Log("Starting method B")
End Sub

Sub Log(message as String)
  System.IO.File.AppendAllText("C:\temp\my.log",message)
End Sub

File.AppendAllText非常擅长关闭事物,因此您可以随后在其他位置写入它

一种更好的方法是让一个类的工作是构建该文件,然后将其全部构建到stringbuilder中,然后将其写入一次。您的多个方法都使用该类,构建该文件...该类可以实现一些定时/定期将数据转储到磁盘上(例如,就像日志记录一样,永无止境,每秒数千个事件..但是也许您会只是使用日志记录框架而不是重新发明轮子),或者它具有将其渲染保存到磁盘的write方法。

如果您的数据还有另一个专门的应用程序在工作,例如,如果您正在生成XML或JSON,则应该查看针对这些数据(已经发明的轮子)的特定序列化方法

,

我用

FileOpen(1,"file.txt",OpenMode.Append)

现在您可以从任何其他子例程中编写

PrintLine(1,"text to write")

直到文件关闭

FileClose(1)

但是也许您可以这样解决您的问题: 在子例程之外将CurrentHisWriter定义为 Private CurrentHisWriter As System.IO.StreamWriter = ...。 然后,您不必关闭并重新打开编写器,您所有的Subs和功能都可以访问它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。