【问题标题】:Single-character strings not writing to file correctly单字符串未正确写入文件
【发布时间】:2015-04-21 09:44:32
【问题描述】:

我的代码有问题,我求助于将数组的内容写入文件,如下所示:-

Private Sub DumpArray (ByRef array_to_dump(,) As MyEnum, ByVal file_name As String)

    Dim sw As StreamWriter = New StreamWriter(file_name)

    For i As Integer = array_to_dump.GetLowerBound(0) To array_to_dump.GetUpperBound(0)

        For j As Integer = array_to_dump.GetLowerBound(1) To array_to_dump.GetUpperBound(1)

            If array_to_dump(i, j) = MyEnum.This Then
                sw.Write("Fred")
            Else
                sw.Write("Bert")
            End If

            sw.Write(vbTab)

        Next j

        sw.WriteLine

    Next i

    sw.Flush
    sw.Close

End Sub

这会产生我期望的输出;在当前情况下,一个用“Fred”填充的文件,用制表符分隔。但是,如果我将代码的业务端更改为:-

            If array_to_dump(i, j) = MyEnum.This Then
                sw.Write("1")
            Else
                sw.Write("0")
            End If

该文件充满了非打印字符,这些字符在记事本中以小方框的形式出现,而不是我期望的由制表符分隔的“0”行。任何其他单字符串对都这样做。

虽然不是一个紧迫的问题,但我很好奇为什么会这样。有人知道吗?

【问题讨论】:

  • 你有没有试过设置streamwriter的编码
  • @DavidSdot,不,我没有碰过它。我看不出我应该如何处理Encoding,它在任何情况下似乎都是只读的。我在这里有什么遗漏吗?
  • 我无法用提供的代码重现问题。我的文件正确写入了 0 和 1。
  • 您确定在将 1 和 0 写入文件时已将它们用引号括起来吗?这里的代码应该可以正常工作。我可以发誓我以前看到过这个问题。发帖人试图将单个字符写入文件,但使用的是sw.Write(1)(不带引号),导致文件写入不正确。
  • 我想到的是this question。不是重复的,但可能会有所帮助。

标签: vb.net file-io


【解决方案1】:

当您像@DavidSdot 所说的那样声明您的SteamWriter 时,您必须将encoding 设置为其他值。像这样:

Dim writer As StreamWriter = New StreamWriter(file_name, Encoding.Default)

弄乱该属性,您可能会发现物有所值。我不是编码专家,但这应该是你问题的罪魁祸首。

【讨论】:

    【解决方案2】:

    我试图重现该问题,但下面的代码可以正常工作。将其与您的真实代码进行比较...可能有错字或原始代码?

    Option Strict On
    Imports System.IO
    
    Public Class Form1
      Private Enum MyEnum As Integer
        This
        That
      End Enum
    
      Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim myArray(1, 1) As MyEnum
        myArray(0, 0) = MyEnum.This
        myArray(0, 1) = MyEnum.This
        myArray(1, 0) = MyEnum.This
        myArray(1, 1) = MyEnum.That
    
        Call DumpArray(myArray, "C:\Junk\Junk.txt")
      End Sub
    
      Private Sub DumpArray(ByRef array_to_dump(,) As MyEnum, ByVal file_name As String)
    
        Dim sw As StreamWriter = New StreamWriter(file_name)
        For i As Integer = array_to_dump.GetLowerBound(0) To array_to_dump.GetUpperBound(0)
          For j As Integer = array_to_dump.GetLowerBound(1) To array_to_dump.GetUpperBound(1)
            If array_to_dump(i, j) = MyEnum.This Then
              sw.Write("0")
            Else
              sw.Write("1")
            End If
            sw.Write(vbTab)
          Next j
          sw.WriteLine()
        Next i
        sw.Flush()
        sw.Close()
      End Sub
    End Class
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-12
      • 2019-10-09
      • 2020-01-29
      • 2014-03-06
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多