Эквивалентность операций открытия / закрытия VB6 / VB.NET - PullRequest
0 голосов
/ 08 июня 2018

Я работаю над преобразованием частей проекта VB6 в VB.Net, и есть некоторые сегменты кода, с которыми у меня возникают проблемы, потому что я не могу найти альтернативы для кода VB6 в VB.Net.Вот кодовый блок, о котором идет речь:

Public Sub ProcessError(ByVal strModule As String, ByVal strProcedure As String, _
                        ByVal strDescription As String, ByVal bLogError As Boolean, _
                        ByVal bShowError As Boolean, Optional ByVal strMsg As String)
    On Error GoTo 100
    Dim intFile As Integer: Dim strPathName As String
    strPathName = AddBackSlash(gsLogPath) & gsErrLogName
    If bLogError = True Then
        If GetFileSize(strPathName) > gcuMaxLogFileSize Then
            Call CopyFile(strPathName, strPathName & ".bak")
            Call DeleteFile(strPathName)
        End If
        intFile = FreeFile
        Open strPathName For Append As #intFile
        Write #intFile, Format(Now, "MMM-DD-YYYY HH:MM:SS AMPM"), strModule, strProcedure, strDescription)
        Close #intFile
    End If
    If bShowError Then
        Call Prompt("Error occurred in " & strModule & vbCrLf & "Error Description :" & strDescription, 1, vbRed)
    End If
    Exit Sub
100:
    Close #intFile
End Sub

Итак, у меня возникли следующие проблемы:

Open strPathName For Append As #intFile
Write #intFile
Close #intFile

Я понимаю, что, вероятно, мне следует использовать объект StreamWriterвместо них, но то, что отталкивает меня, это раздел «Ошибка».Если выдается ошибка и она достигает отметки 100, как будет работать Close #intFile, если она еще не была открыта или создана?

Для большинства других неприятностей преобразования, с которыми я столкнулся припортирование этого на этот вопрос меня смущает больше всего, поэтому любая помощь приветствуется.Спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Это исправляет ошибки, а также обновляет большую часть кода для использования стилей и API, более типичных для современного VB.Net.Чтобы это работало как есть, убедитесь, что в верхней части файла есть директива Imports System.IO.

Public Sub ProcessError(ByVal ModuleName As String, ByVal ProcedureName As String, _
                        ByVal Description As String, ByVal LogError As Boolean, _
                        ByVal ShowError As Boolean, Optional ByVal Message As String)

    If LogError Then
        Dim logFile As New FileInfo(Path.Combine(gsLogPath, gsErrLogName))
        If logFile.Length > gcuMaxLogFileSize Then
            logFile.MoveTo(logFile.FullName & ".bak")
        End If

        Try
            File.AppendAllText(PathName, String.Format("{0:d},""{1}"",""{2}"",""{3}""", DateTime.Now, ModuleName, ProcedureName, Description))
        Catch
        End Try
    End If

    If ShowError Then
        MsgBox(String.Format("Error occurred in {0}{1}Error Description:{2}", ModuleName, vbCrLf, Description))
    End If

End Sub

Здесь стоит обратить внимание на рекомендации по стилю , опубликованные Microsoft для VB.Net сейчас явно рекомендую против венгерских префиксов типов.

0 голосов
/ 08 июня 2018

Если у вас есть только одна строка для записи, вы можете использовать встроенный метод, который сделает всю работу за вас.

Dim inputString As String = "This is a test string."
My.Computer.FileSystem.WriteAllText(
  "C://testfile.txt", inputString, True)

Дополнительная помощь здесь: https://docs.microsoft.com/en-us/dotnet/visual-basic/developing-apps/programming/drives-directories-files/how-to-append-to-text-files?view=netframework-4.7.2

...