删除 VB.net 中文件末尾的 CR/LF

Removing CR/LF at end of file in VB.net

我已经搜索过这个问题的解决方案,但我发现的任何解决方案要么超出我的需要,要么不完全是我想要的。

我有要附加到的文件。我需要追加到最后一行的末尾,但它们都有一个回车 return,所以如果我只是正常追加,我最终会追加到新行。

我只想制作一个子例程,该子例程采用文件路径并删除其末尾的 CR/LF,不多也不少。任何帮助我解决这个问题的帮助将不胜感激。我很惊讶没有内置函数来执行此操作。

我发现 String.Replace(ControlChars.CrLf.ToCharArray(),"") 有效。

可能还有更好的方法!

    Dim crString = Environment.NewLine '= vbCrLf
    Dim crBytes = Encoding.UTF8.GetBytes(crString)
    Dim bytesRead(crBytes.Length -  1) as Byte
    Dim iOffset As Integer = 0
    Dim stringRead As String 

    Using fs = File.Open("G:\test.txt", FileMode.Open, FileAccess.ReadWrite)      
        While iOffset < fs.Length    
            fs.Seek(- (crBytes.Length + iOffset), SeekOrigin.End)
            fs.Read(bytesRead,0, crBytes.Length)
            stringRead = Encoding.UTF8.GetString(bytesRead)
            If stringRead = crString Then
                fs.SetLength(fs.Length - (crBytes.Length  * iOffset + 1))
                Exit While
             End If
            iOffset += 1
        End While
    End Using

我打开文本文件 FileStream 并将其位置设置为文件末尾 - 回车符 return 字符串的长度。

然后我读取当前字节,同时减少偏移量,直到找到回车 return 或达到 eof。

如果找到 CR,我会删除它以及之后的所有内容。 如果您不想要,只需删除循环并仅检查 eof。 但是在 eof 处可能有一些 vbNullString 这就是我使用循环的原因。

请注意 我在示例中使用了 UTF8 编码。如果您有其他编码,则必须相应地进行调整。

test.txt 之前 运行:

test.txt 在代码片段 运行:

之后

编辑fs.SetLength 部分错误,因为文件中的最后一个字符不是 CR。