Vb.net StreamWriter随机不将最后一行输出到文件中

Vb.net StreamWriter随机不将最后一行输出到文件中,vb.net,streamwriter,Vb.net,Streamwriter,我正试图将一个类保存到一个文本文件中,结果好坏参半。添加的最后一行有一半时间在文件中,有时不在文件中。我无法获得文件的一致输出 因此,我添加了一个调试来显示StreamWriter.Write之前正在编写的内容,它显示了我添加的行,但没有显示在文件中 ^此行是未写入文件的最后一行 以下是我保存数据的代码: Private sub SaveMemoUsersFile() If _memoList is Nothing Then return End I

我正试图将一个类保存到一个文本文件中,结果好坏参半。添加的最后一行有一半时间在文件中,有时不在文件中。我无法获得文件的一致输出

因此,我添加了一个调试来显示StreamWriter.Write之前正在编写的内容,它显示了我添加的行,但没有显示在文件中

^此行是未写入文件的最后一行

以下是我保存数据的代码:

  Private sub SaveMemoUsersFile()

      If _memoList is Nothing Then
        return
      End If

      Dim memofile = Path.Combine(Configuration.DataFileLocations, $"{Configuration.CompanyID}ucMemoUsers.txt")
      Const quote As String = """"
      Const comma As String = ","
      Dim both = $"{quote}{comma}{quote}"

      Using sw = New StreamWriter(memofile)
        For Each memoUsers As MemoUsers In _memoList
          Dim sb = New StringBuilder()
          sb.Append(quote)
          sb.Append(memoUsers.Initials)
          sb.Append(both)
          sb.Append(memoUsers.EmailAddress)
          sb.Append(both)
          sb.Append(memoUsers.DelinquentLetterCode)
          sb.Append(both)
          sb.Append(memoUsers.Description)
          sb.Append(quote)
          'sb.Append(vbCr)
          console.write(sb) <--- shows the last line
          sw.WriteLine(sb.ToString()) <--- but doesn't write it to the file
        Next
      End Using

    _memoList = nothing

  End sub

有人有什么建议吗?我完全不明白为什么会随机写入文件。

不妨在stringbuilder中构建文件并写入:

Private sub SaveMemoUsersFile()

      If _memoList is Nothing Then
        return
      End If

      
      Dim q = """"
      Dim b = $"{q},{q}"

      Dim sb = New StringBuilder()

      For Each memoUsers As MemoUsers In _memoList
          sb.Append(q)
          sb.Append(memoUsers.Initials).Append(b)
          sb.Append(memoUsers.EmailAddress).Append(b)
          sb.Append(memoUsers.DelinquentLetterCode).Append(b)
          sb.Append(memoUsers.Description).AppendLine(q)
      Next

      Dim memofile = Path.Combine(Configuration.DataFileLocations, $"{Configuration.CompanyID}ucMemoUsers.txt")
     
      IO.File.WriteAllText(memoFIle, sb.ToString())

      _memoList = nothing

  End sub

冲水?为什么使用vbCr而不是vbCrLf或vbLf或sw.Writeline?没有人再使用字符13作为行分隔符。我更改了它,但它对保存没有任何影响。它仍然在做同样的事情。用人单位不应该处理这个问题吗?我听到了。我刚刚结束了我的问题,因为一个不熟悉特定技术的人不理解我的问题,他说我需要补充细节。细节就在那里。。。任何进一步的细节都是无关紧要和令人分心的。对于你的问题,我希望我有一个答案,但它似乎与CR、LF或CRLF的存在/不存在有关,或者与上述任何一个都没有关系。最后一行通常什么都没有,这对人类来说很好,但对寻找完整行的软件来说却不是。这可能取决于操作的上下文_memoList不是作为参数传递给方法的,很难说它是如何使用的,什么时候使用的。这个方法是脱离上下文的:它可以在线程上运行,不清楚这是什么类型的应用程序,因此是一般上下文。我将删除_memoList=nothing,将StringBuilder声明移动到循环之前,并在内容写入后清除它。循环后冲洗。-我可能同意在否决表决之前可以要求澄清,但这有那么重要吗?谢谢!我今天学到了一些东西!我将清理我的代码,尽管将其更改为WriteAllText并不能解决我的问题。开始认为它是我绑定到的类。WriteAllText肯定是可靠的,如果您的stringbuilder包含文本,文件也会;使用调试器验证stringbuilder的内容