Rubrik: | VB-Versionen: VB2005, VB2008 | 14.01.11 |
Heute möchten wir Ihnen eine Funktion vorstellen, mit der sich eine Datei beliebigen Typs (Textdatei, EXE, Word, usw). schnell nach einem bestimmten Text durchsuchen lässt.
Schnell deshalb, da die Datei nicht zeilenweise, sondern blockweise eingelesen wird.
''' <summary>
''' Durchsucht eine beliebige Datei nach dem angegebenen Text.
''' </summary>
''' <param name="Filename">Dateiname</param>
''' <param name="Text">Text, nach dem gesucht wird.</param>
''' <param name="StartPos">Position, mit der begonnen werden soll.</param>
''' <returns>Fundstelle beginnend mit 1, andernfalls 0.</returns>
Public Function SearchFileForText(ByVal Filename As String, _
ByVal Text As String, _
ByVal StartPos As Integer) As Integer
Dim TextPos As Integer = -1
' Datei zum Lesen öffnen
Using oStream As New IO.FileStream(Filename, IO.FileMode.Open, IO.FileAccess.Read)
' Blockgröße
Dim BlockSize As Integer = 16384
Dim Bytes(BlockSize) As Byte
Dim ReadSize As Integer
Dim Buffer As String = ""
Dim BufferOld As String = ""
Dim FilePos As Integer = 0
' Datei blockweise auslesen, bis Dateiende erreicht
If StartPos > 1 Then oStream.Seek(StartPos, IO.SeekOrigin.Begin)
Do
' Inhalt durchsuchen
ReadSize = oStream.Read(Bytes, 0, BlockSize)
Buffer = System.Text.Encoding.Default.GetString(Bytes, 0, ReadSize)
TextPos = (BufferOld & Buffer).IndexOf(Text)
BufferOld = Buffer
FilePos += ReadSize
Loop Until ReadSize = 0 Or TextPos >= 0
oStream.Close()
End Using
Return TextPos + 1
End Function