首页 > 解决方案 > VB6 到 VB.NET 的转换(语法:打印到 StreamWriter/Reader)?

问题描述

以下代码是 VB6 应用程序的一部分,我目前正在转换为VB.NETWindows 服务。以开头的行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.netvb6-migration

解决方案


与号&, 是 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

推荐阅读