删除vb .NET中的最后一个字符(空行)

时间:2013-02-12 19:35:37

标签: vb.net newline filestream

我必须在vb .NET中以编程方式删除文件的最后一行。有时,只有一个空行,有时两行(但从不多)。

我现在使用这些代码行:

fs = New FileStream(Fic_source, FileMode.Open, FileAccess.ReadWrite)
fs.Seek(-50, SeekOrigin.End)
Dim strEOF As String = New StreamReader(fs).ReadToEnd()
strEOF = strEOF .Replace(vbCrLf, "")  ' 
strEOF = strEOF .Replace("\r", "")    ' Removes every CR / LF / CRLF from the end of the file
strEOF = strEOF .Replace("\n", "")    '
strEOF = String.Concat(strEOF , vbCrLf) ' adds an empty line to finish the file correctly

但我似乎无法弄清楚如何将我的信息流中的最后50个字符替换为strEOF,任何人都有了想法?

4 个答案:

答案 0 :(得分:0)

如果是我,我会考虑更改文件的长度 - 在文件流上尝试SetLength。冲洗并关闭。

答案 1 :(得分:0)

由于您将流中的数据转换为字符串,因此使用正则表达式来匹配并替换多个CRLF的可能性。正则表达式处理器的一个细微差别就是你可以告诉它从右到左工作;因此从最后开始。

以下模式将从末尾($)开始,并且只用一个CRLF替换任何CRLF(最多两个,或四个字符为\ r \ n)。如果没有,那么即使它与任何字符集都不匹配,它也将替换(实际放入)最后一个。

dim data = string.Format("ABC{0}DEF{0}{0}", Environment.NewLine) ' 2 CRLF
dim pattern = "[\r\n]{0,4}$"

Console.WriteLine( "***{0}***", Regex.Replace( data, pattern, Environment.NewLine, RegexOptions.RightToLeft) )

data = string.Format("ABC{0}DEF", Environment.NewLine) ' No CRLFS

Console.WriteLine( "***{0}***", Regex.Replace( data, pattern, Environment.NewLine, RegexOptions.RightToLeft) )

' Console Results (note that *** is following each DEF
'***ABC
'DEF
'***
'***ABC
'DEF
'***

答案 2 :(得分:0)

你想从你的文本末尾修剪CR和LF,所以你也可以使用.TrimEnd:

strEOF = strEOF.TrimEnd(vbCrLf.ToArray) & vbCrLf

答案 3 :(得分:0)

Dim objWriter As New StreamWriter(FileNamewithPath, True)
objWriter.NewLine = Chr(10) 'This works as ENTER on keyboard. This is optional.
objWriter.WriteLine("The text that is required to write")
'Loop it to get all the values you need to write.
'Before the last line. i.e. before your end loop - 1 step
objWriter.NewLine = "" 'add this
objWriter.WriteLine("last line to be written").
objWriter.Close()