vb.net - VB6 到 VB.NET 的转换(语法:打印到 StreamWriter/Reader)?
问题描述
以下代码是 VB6 应用程序的一部分,我目前正在转换为VB.NET
Windows 服务。以开头的行Open
给了我一个错误(我假设“打开”语法不支持 with VB.NET
)。我尝试利用我拥有的所有 VB.NET 知识转换代码,但想知道理想/乐观的解决方案。
VB6 代码
Private Sub Text1_GotFocus()
Me.lblCompanyName.Caption = ""
Me.lblCompanyName.Refresh
lngPosted = 0
lngSkipped = 0
lngClosed = 0
strMsg = Dir(strPath & "\WisysDataCollector_*.log", vbNormal)
Do While strMsg <> ""
On Error Resume Next
If strMsg < "WisysDataCollector_" & Format(DateAdd("m", -12, Now), "yyyyMM") Then
Kill(strPath & "\" & strMsg)
End If
On Error GoTo 0
strMsg = Dir()
Loop
datTimeStart = Now
Do
On Error Resume Next
Open strPath & "\WisysDataCollector_" & Format(Now, "yyyyMM") & ".log" For Append Lock Read Write As #1
lngST = Err.Number
strMsg = Err.Description
On Error GoTo 0
If lngST = 0 Then
Exit Do
End If
dblTimeElapsed = (Now - datTimeStart) * 24 * 60 * 60
If dblTimeElapsed > 20 Then
varResponse = vbCancel
If varResponse = vbCancel Then
strStatus = "Log file busy. Process aborted."
GoTo EXITFORM
End If
datTimeStart = Now
End If
Loop
Code continues.......
我试过IO.StreamWriter
的:创建了一个'FileIO'类,如下所示IO.StreamReader
Public Class FileIO
Public Shared Sub WriteLog(strToWrite As String)
Dim filePath As String = AppDomain.CurrentDomain.BaseDirectory + "\WisysDataCollector_" + Format(Now, "MMddyy") + ".log"
Dim streamWr As IO.StreamWriter = Nothing
Try
streamWr = New IO.StreamWriter(filePath, True)
streamWr.Write(Now + " - " + strToWrite + vbNewLine)
streamWr.Flush()
streamWr.Close()
Catch ex As Exception
End Try
End Sub
Public Shared Sub ReadLog(strToWrite As String)
Dim filePath As String = AppDomain.CurrentDomain.BaseDirectory + "\WisysDataCollector_" + Format(Now, "MMddyy") + ".log"
Dim streamRd As IO.StreamReader = Nothing
Try
streamRd = New IO.StreamReader(filePath, True)
streamRd.Read()
streamRd.Close()
Catch ex As Exception
End Try
End Sub
End Class
请让我知道我在上面的代码中犯的错误,我应该如何使用“FileIO”类来纠正“Open”和“Print #1”的错误?
另外,如果有人可以通过此代码行澄清他们试图做什么(老实说,我试图理解但不确定为什么他们将时差乘以 24 * 60 * 60)dblTimeElapsed = (Now - datTimeStart) * 24 * 60 * 60
?
解决方案
与号&
, 是 vb.net 的连接字符。虽然加号通常会起作用,但如果涉及数字,您可能会得到意想不到的结果。
流必须被释放以释放非托管资源。Using...End Using
块为我们处理这个问题。
我制作filePath
了一个类级别的变量,因为它用于多个方法。这也一定是Shared
因为它在Shared
方法中使用。我更改了日期的格式,因此它将按时间顺序显示在文件资源管理器中。
阅读日志并且什么都不做是没有意义的。我将ReadLog
方法更改为Function
. 将字符串传递给它也是没有意义的。
我相信 vb6 代码试图以秒为单位表示 24 60 60 业务的经过时间。我给了你一个例子,Form.Load
设置了startTime
,然后在一段时间后点击一个按钮并计算已经过去的秒数。
在表单类...
Private StartTime As DateTime
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
StartTime = Now
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
FileIO.WriteLog(TextBox1.Text)
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
TextBox2.Text = FileIO.ReadLog
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim elapsedTime As TimeSpan = Now - StartTime
Dim TotalSeconds = elapsedTime.TotalSeconds
MessageBox.Show($"The elapsed time since the program started is {TotalSeconds}")
End Sub
你的课看起来像这样......
Public Class FileIO
Private Shared filePath As String = AppDomain.CurrentDomain.BaseDirectory & "\WisysDataCollector_" & Format(Now, "yyyyMMdd") & ".log"
Public Shared Sub WriteLog(strToWrite As String)
Using sw = File.AppendText(filePath)
sw.WriteLine(strToWrite)
End Using
End Sub
Public Shared Function ReadLog() As String
If File.Exists(filePath) Then
Return File.ReadAllText(filePath)
Else
Return ""
End If
End Function
End Class
推荐阅读
- regex - 在 HP-UX (hpia11.31) 上构建 Perl 5.32.1 的失败 - 与失败的正则表达式评估有关
- activemq-artemis - ActiveMQ Artemis:2 节点集群不使用队列
- oracle - 配置在 Windows 10 上运行的 Oracle XE 日志记录,防止写入 Windows 事件日志
- python - 如何将用熊猫提取的一列excel数据中的NaN替换为0
- dask - 在 dask 分布式中具有正确资源分配的工人示例
- javascript - 如何在 React 中过滤对象数组
- c - C编程中__attributes__的解释:
- javascript - 如果属性在另一个数组中并且值为 true,则过滤对象数组
- sql - 当我可以在复合列上使用具有唯一约束的单个主键时,为什么要使用复合主键?
- sql - 如何让 IIS 使用 AppPool Identity 连接到 SQL Server 而不是 NT Authority\IUSR?