如何从visual basic中的文本文件中删除第一行和最后一行

时间:2010-01-20 06:44:56

标签: vb.net file-io

我看过有关从文本文件中删除指定为函数参数的行的帖子,但我只需删除文件中的第一行和最后一行。

在处理文件时,我仍然是新手,但似乎删除第一行应该很简单......只需将BOF中的所有文本删除到第一个CrLf字符即可。我是对的吗?

至于最后一行,我知道我必须得到文本文件中的行数才能找到它(因为文件的长度并不总是x行数)。这是我真正需要帮助的地方。

N.B。我正在使用VB.NET 2005

3 个答案:

答案 0 :(得分:4)

将文件作为字符串完全读入行列表。使用索引循环将文件写回,以捕获除第一个和最后一个项之外的所有项。

    Dim listText As New List(Of String)
    Dim objLine As String = ""

    Using objReader As StreamReader = New StreamReader("c:\test.txt")
        Do
            objLine = objReader.ReadLine()
            If objLine IsNot Nothing Then listText.Add(objLine)
        Loop Until objLine Is Nothing
    End Using

    Using objWriter As StreamWriter = New StreamWriter("c:\testOutput.txt")
        For I As Integer = 1 To listText.Count - 2
            objWriter.WriteLine(listText.Item(I))
        Next
    End Using

编辑以满足挑剔:

    Dim arrText() As String
    Dim sLine As String = ""

    arrText = File.ReadAllLines("c:\test.txt")

    Using objWriter As StreamWriter = New StreamWriter("c:\testOutput.txt")
        For I As Integer = 1 To arrText.Length - 2
            objWriter.WriteLine(arrText(I))
        Next
    End Using

答案 1 :(得分:1)

文件是流,没有快捷方式。您必须读取整个文件并将其写回,减去第一行和最后一行。当然效率极低,请改用数据库。

答案 2 :(得分:1)

这是删除最后一行,而不读取整个文件。您可能需要修改逻辑以考虑EOF是换行符......

    Dim fs As New FileStream("c:\test.txt", FileMode.Open, FileAccess.ReadWrite)
    Dim b(1) As Byte

    Do
        fs.Seek(fs.Length - 2, SeekOrigin.Begin) 'seek 2 bytes from EOF
        fs.Read(b, 0, 2) 'read last two bytes
        'are they newline
        If System.Text.Encoding.ASCII.GetString(b, 0, 2) <> Environment.NewLine Then
            fs.SetLength(fs.Length - 1) 'set length to -1
        Else
            fs.SetLength(fs.Length - 2)
            Exit Do
        End If
    Loop
    fs.Close()