我看过有关从文本文件中删除指定为函数参数的行的帖子,但我只需删除文件中的第一行和最后一行。
在处理文件时,我仍然是新手,但似乎删除第一行应该很简单......只需将BOF中的所有文本删除到第一个CrLf字符即可。我是对的吗?
至于最后一行,我知道我必须得到文本文件中的行数才能找到它(因为文件的长度并不总是x行数)。这是我真正需要帮助的地方。
N.B。我正在使用VB.NET 2005
答案 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()