Есть ли альтернатива FileSystem.WriteAllText для редактирования текстового файла, мне нужно сохранить специальные символы - PullRequest
0 голосов
/ 13 июля 2020

Я отправляю текстовый файл на принтер через stati c IP. В моем проекте я сохраняю текстовый файл шаблона, и мне нужно настроить его содержимое перед его отправкой.

Из-за ограничений символов FileSystem.WriteAllText он удаляет все специальные символы из файла. Я ищу альтернативный метод редактирования / сохранения файла или другой способ отправить файл, не сохраняя его.

Любые идеи были бы замечательными, спасибо.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim filePath As String = "C:\Users\..."
        Dim fileReader As String = My.Computer.FileSystem.ReadAllText(filePath & "Template1.txt").Replace("MISCTEXT", "Hello World").Replace("QTY", "QTY 1")
        My.Computer.FileSystem.WriteAllText(filePath & "Template.txt", fileReader, False)

        Dim IP As String = "XXX.XX.XXX.XXX"

        Dim clientSocket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
        clientSocket.Connect(New IPEndPoint(IPAddress.Parse(IP), 9100))

        clientSocket.SendFile(filePath & "Template.txt")
        clientSocket.Close()

    End Sub

Здесь это небольшой пример специальных символов. До:

ØÿÁþÄ? Åÿ ÃÿÙÿÄ Åÿ ÃÿØÿÁþ €

После:

? �� ����� �� ������� �

1 Ответ

0 голосов
/ 14 июля 2020

После некоторых экспериментов и всех советов я заставил это работать.

Проблема заключалась не только в записи файла, но и в его чтении. Добавляя кодировку как перегрузку для чтения и записи, я занимаюсь бизнесом. Мне потребовалось несколько попыток, чтобы получить правильное значение для кодирования, см. Исправленный образец кода.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim filePath As String = "C:\Users\..."
        Dim fileReader As String = My.Computer.FileSystem.ReadAllText(filePath & "Template1.txt", Encoding.Default).Replace("MISCTEXT", "Hello World").Replace("QTY", "QTY 1")
        My.Computer.FileSystem.WriteAllText(filePath & "Template.txt", fileReader, False, Encoding.Default)

        Dim IP As String = "XXX.XX.XXX.XXX"

        Dim clientSocket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
        clientSocket.Connect(New IPEndPoint(IPAddress.Parse(IP), 9100))

        clientSocket.SendFile(filePath & "Template.txt")
        clientSocket.Close()

    End Sub
...