如何在vb.net中删除文本文件末尾的行?

如何在vb.net中删除文本文件末尾的行?,vb.net,filestream,streamwriter,Vb.net,Filestream,Streamwriter,如何确保文件末尾没有多余的一行?这有点特别,我把这行分成三个地方,分别是17、90和120字节(总共227字节)。我试着用Write替换WriteLine,这很好,但之后我就不能写新行了! 我当前的代码: Dim bibliotheque As New article With bibliotheque .Title = TextBox1.Text .Name = TextBox2.Text .Charg

如何确保文件末尾没有多余的一行?这有点特别,我把这行分成三个地方,分别是17、90和120字节(总共227字节)。我试着用Write替换WriteLine,这很好,但之后我就不能写新行了! 我当前的代码:

 Dim bibliotheque As New article

        With bibliotheque
            .Title = TextBox1.Text
            .Name = TextBox2.Text
            .Charge = TextBox3.Text
        End With

        Dim fileName As String = "c:\essai.librairie"

        Dim fs As FileStream = Nothing
        Try
            fs = New FileStream(fileName, FileMode.Append)
            Using writer As StreamWriter = New StreamWriter(fs)

                writer.WriteLine(bibliotheque.Title.PadRight(17, " "c).ToString & bibliotheque.Name.PadRight(90, " "c).ToString & bibliotheque.Charge.PadRight(120, " "c).ToString)

                ListBox1.Items.Add(bibliotheque.Name)

            End Using

        Finally
            If fs IsNot Nothing Then
                fs.Dispose()
            End If
        End Try

您可以将
WriteLine
替换为
Write
,使用布尔变量了解是否已添加第一行,如果已添加第一行,则在添加内容之前,使用
WriteLine
仅添加带空字符串的回车/换行符,如下所示:

Dim linesExist为Boolean=IO.File.ReadAllLines(fileName.Count>0
尝试
fs=新文件流(文件名,FileMode.Append)
将writer用作StreamWriter=新StreamWriter(fs)
如果linesExist,那么writer.WriteLine()
writer.Write(BiblioSequee.Title.PadRight(17,,,c.ToString&BiblioSequee.Name.PadRight(90,,,c.ToString&BiblioSequee.Charge.PadRight(120,,,c.ToString))
ListBox1.Items.Add(BiblioRequest.Name)
终端使用
最后
如果fs不是什么,那么
财政司司长
如果结束
结束尝试

显然,
File.ReadAllLines
可能很慢,您可以使用更优化的方法来检测文件是否存在和是否包含内容,但它确实解决了手头的问题。

您可以将
WriteLine
替换为
Write
,使用布尔变量了解是否已添加第一行,如果已添加第一行,则在添加内容之前,仅使用带有空字符串的
WriteLine
添加回车符/换行符,如下所示:

Dim fileName As String = "c:\essai.librairie"
Dim bt As New article With {
            .Title = TextBox1.Text,
            .Name = TextBox2.Text,
            .Charge = TextBox3.Text
    }

Using fs As New FileStream(fileName, FileMode.Append)
Using writer As New StreamWriter(fs)
    If fs.Length > 0 Then writer.WriteLine()
    writer.Write($"{bt.Title,-17}{bt.Name,-90}{bt.Charge,-120}")
End Using
End Using
ListBox1.Items.Add(bt.Name)
Dim linesExist为Boolean=IO.File.ReadAllLines(fileName.Count>0
尝试
fs=新文件流(文件名,FileMode.Append)
将writer用作StreamWriter=新StreamWriter(fs)
如果linesExist,那么writer.WriteLine()
writer.Write(BiblioSequee.Title.PadRight(17,,,c.ToString&BiblioSequee.Name.PadRight(90,,,c.ToString&BiblioSequee.Charge.PadRight(120,,,c.ToString))
ListBox1.Items.Add(BiblioRequest.Name)
终端使用
最后
如果fs不是什么,那么
财政司司长
如果结束
结束尝试

显然,
File.ReadAllLines
可能很慢,您可以使用更优化的方法来检测文件是否存在以及是否有内容,但它确实解决了手头的问题。

writer.WriteLine()writer.Write(biblioteque.Title…
?我的行分为几个部分(其中,三个部分)在录制时,这是正确的。在写入第一行之后,可以使用writer.Write(VbCr&(…)之类的东西。根据打开文件所使用的文本编辑器,可以使用VbLf或VbCrLf。我使用的是记事本++和写字板:)没有空行。记事本或写字板等编辑器允许您将插入符号移到文件末尾之外,从而产生文本末尾有空行的错觉。实际上不存在,如果没有该功能,添加更多的文本行将非常尴尬。
writer.WriteLine()writer.Write(biblioteque.Title…
?我的行分为几个部分(在那里,三个),在录制时,这是正确的。在写完第一行之后,您可以使用writer.Write(VbCr&(…)之类的东西。根据用于打开文件的文本编辑器,您可以使用VbLf或VbCrLf。我使用的是记事本++和写字板:)没有空行。记事本或写字板等编辑器允许您将插入符号移到文件末尾之外,从而产生文本末尾有空行的错觉。实际上没有,如果没有这个功能,添加更多的文本行会非常尴尬。非常感谢Spyros P.非常好!:)克劳德。非常感谢斯皮罗斯P。太好了!:)克劳德,非常感谢乔尔·科霍恩。超级:)克劳德,两个都很好。在这两种情况下,这都非常有效。非常感谢乔尔·科霍恩。超级:)克劳德,两个都很好。在这两种情况下,这都非常有效。
Dim fileName As String = "c:\essai.librairie"
Dim bt As New article With {
            .Title = TextBox1.Text,
            .Name = TextBox2.Text,
            .Charge = TextBox3.Text
    }

Using fs As New FileStream(fileName, FileMode.Append)
Using writer As New StreamWriter(fs)
    If fs.Length > 0 Then writer.WriteLine()
    writer.Write($"{bt.Title,-17}{bt.Name,-90}{bt.Charge,-120}")
End Using
End Using
ListBox1.Items.Add(bt.Name)