Rubrik: Dateisystem · Dateien lesen/schreiben | VB-Versionen: VB2010 - VB2015 | 23.10.17 |
Anzahl Zeichen am Ende einer Text-Datei lesen Eine Routine zum schnellen Lesen einer Anzahl von Textzeichen, die den Abschluß eines langen Textes in einer Datei bilden | ||
Autor: Manfred Bohn | Bewertung: | Views: 5.075 |
ohne Homepage | System: Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Um die Zeichen am Ende eines langen Textes zu lesen, kann man die Datei binär als Filestream öffnen und ab einer bestimten Byte-Position den Inhalt lesen (Random Access). Diese Bytefolge ist durch den passenden Text-Decoder in eine Folge von Textzeichen umzuwandeln.
Es ist zu beachten, daß z.B. in Unicode-Formaten gespeicherte Texte mehr als ein Zeichen pro Byte verwenden. Die "GetMaxByteCount"-Methode der Encoder-Klasse gibt das Maximum an. Deswegen kann der aus der Bytefolge erhaltene Text länger sein, als die angeforderte Zahl der Zeichen (Parameter: LengthOfText) und wird in dem Fall gekürzt.
Function GetEndOfTextFile(ByVal File As String, _ LengthOfText As Integer, enc As System.Text.Encoding) As String If Not IO.File.Exists(File) Then Return Nothing If LengthOfText < 1 Then Return Nothing If enc Is Nothing Then Return Nothing Dim fi As New IO.FileInfo(File) If fi.Length < 1 Then Return Nothing Dim Bytelength As Integer = enc.GetMaxByteCount(1) * LengthOfText If fi.Length < Bytelength Then Bytelength = fi.Length Dim pos As Integer = fi.Length - Bytelength Dim EndOfTextFile(Bytelength - 1) As Byte Try Using fs As New IO.FileStream(File, _ IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.ReadWrite) fs.Position = pos fs.Read(EndOfTextFile, 0, Bytelength) End Using Dim text As String = enc.GetString(EndOfTextFile) If text.Length > LengthOfText Then text = text.Substring(text.Length - LengthOfText, LengthOfText) End If Return text Catch Return Nothing End Try End Function