FileInfo.ReadLines - Extension

    • VB.NET

      FileInfo.ReadLines - Extension

      VB.NET-Quellcode

      1. Imports System.Runtime.CompilerServices
      2. Imports System.Text
      3. Namespace System.IO
      4. Public Module SystemIOX
      5. <Extension(), DebuggerStepThrough()> _
      6. Public Function ReadLines(fi As FileInfo, Optional encoding As Encoding = Nothing) As IEnumerable(Of String)
      7. Return IO.File.ReadLines(fi.FullName, If(encoding, encoding.Default))
      8. End Function
      9. End Module
      10. End Namespace
      Beachte: aufgrund des System-Namespaces muss dieses Modul in ein Helpers-Projekt. Das Helpers-projekt muß vom Typ Klassenbibliothek sein, und darf keinen Root-Namespace haben.
      Dann ist diese Extension überall verfügbar, wo FileInfo verfügbar ist (das Beispiel gibt die Datei - falls vorhanden - zeilenweise als Messagebox aus):

      VB.NET-Quellcode

      1. Private Sub Vorlesen()
      2. With New FileInfo("Vorlesen.txt")
      3. If Not .Exists Then Throw New Exception("Wassn vorlesen?? :( ")
      4. .ReadLines.ForEach(AddressOf MessageBox.Show)
      5. End With
      6. End Sub
      Das gute an .ReadLines im Gegensatz zu File.ReadAllLines ist, dass ReadLines kein String-Array zurückgibt, sondern ein IEnumerable(Of String). Ein Array belegt nämlich Speicherplatz für die komplette Datei, während .ReadLines nur einen internen Puffer belegt, und halt die aktuelle Zeile.



      Ups! - die ForEach-Extension braucht ihr für dieses spezielle Sample ja auch!

      VB.NET-Quellcode

      1. Imports System.Runtime.CompilerServices
      2. Namespace System.Collections.Generic
      3. <Microsoft.VisualBasic.HideModuleName()> _
      4. Public Module CollectionX
      5. <DebuggerStepThrough(), Extension()> _
      6. Public Sub ForEach(Of T)(items As IEnumerable(Of T), Action As Action(Of T))
      7. For Each itm In items
      8. Action(itm)
      9. Next
      10. End Sub
      11. End Module
      12. End Namespace

      Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „ErfinderDesRades“ ()