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

时间:2016-05-12 09:02:03

标签: vb.net file carriage-return

我已经找到了解决这个问题的方法,但是我发现的任何一种方式要么比我需要的要多得多,要么就是我想要的。

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

我想要的只是创建一个子程序,它接受一个文件路径,并在它的末尾删除CR / LF,不多也不少。任何帮助指出我的解决方案将不胜感激。我很惊讶没有内置功能来做这件事。

2 个答案:

答案 0 :(得分:3)

    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并将其位置设置为文件的末尾 - 回车符的长度。

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

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

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

运行之前

test.txt:

Before

代码段运行后

test.txt:

enter image description here

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

答案 1 :(得分:0)

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

也可能是更好的方法!