.NET Console.WriteLine() Console.SetOut
Я написал программу, чтобы пройти через фиксированный файл и вставить | при необходимости программа работает нормально и корректно отображается в консоли. Проблема в том, что я не могу получить строку из консоли для записи в строку в файле. Все попытки заканчиваются пустым файлом или каждой строкой строки, записанной в виде отдельной строки. Код ниже показывает тот, где он должен записать вывод в файл, но файл пуст.
Imports System.IO
Module Module1
Sub Main()
Dim stdFormat As Integer() = {3, 13, 11, 5, 2, 2, 13, 14, 30, 15, 76, 80, 95, 100, 50, 2, 10, 30}
Using MyReader As New FileIO.TextFieldParser("SOURCE.txt")
MyReader.TextFieldType = FileIO.FieldType.FixedWidth
MyReader.FieldWidths = stdFormat
Dim currentRow As String()
While Not MyReader.EndOfData
Try
Dim rowType = MyReader.PeekChars(3)
If String.Compare(rowType, "Err") = 0 Then
Else
MyReader.SetFieldWidths(stdFormat)
End If
currentRow = MyReader.ReadFields
For Each newString In currentRow
Console.Write(newString & "|")
Next
Dim file = New FileStream("test.txt", FileMode.Append)
Dim standardOutput = Console.Out
Using writer = New StreamWriter(file)
Console.SetOut(writer)
Console.WriteLine()
Console.SetOut(standardOutput)
End Using
Catch ex As FileIO.MalformedLineException
End Try
End While
End Using
Console.ReadLine()
End Sub
End Module
1 ответ
Затем вы устанавливаете стандартный поток вывода на writer
написание одной новой строки для стандарта (перенаправлено на writer
), затем сброс стандартного выходного потока.
Что вам нужно сделать, это записать в файл. Не возиться с перенаправлением потоков. Если мы объединяем консоль и запись файлов, мы можем сделать это немного чище.
Using writer = New StreamWriter(file)
String newStr = ""
For Each columnStr In currentRow
newStr = columnStr & "|"
writer.WriteLine(newStr)
// If you don't want the console output, just remove the next line
Console.WriteLine(newStr)
Next
End Using