vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik:    |   VB-Versionen: VB2005, VB200814.01.11
Eine Datei beliebigen Typs schnell durchsuchen

Mit Hilfe der hier vorgestellten Funktion lässt sich eine Datei beliebigen Typs schnell nach einem Text durchsuchen.

Autor:  Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  1.942 
http://www.tools4vb.de/System:  Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt 

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