我已经找到了解决这个问题的方法,但是我发现的任何一种方式要么比我需要的要多得多,要么就是我想要的。
我有要附加的文件。我需要追加到最后一行的末尾,但它们都有一个回车符,所以如果我只是正常追加,我最终会追加到新行。
我想要的只是创建一个子程序,它接受一个文件路径,并在它的末尾删除CR / LF,不多也不少。任何帮助指出我的解决方案将不胜感激。我很惊讶没有内置功能来做这件事。
答案 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:
代码段运行后test.txt:
编辑:如果文件中的最后一个字符不是CR,则fs.SetLength
部分错误。
答案 1 :(得分:0)
我发现String.Replace(ControlChars.CrLf.ToCharArray(),"")
有效。
也可能是更好的方法!