Obtener Estructura Encabezado DBF Desde Visual Basic .Net

A continuación les traigo una pequeña clase que les permitirá obtener los siguientes datos del encabezado de un archivo DBF.

  •  version (Byte)
  •  updateYear (Byte)
  •  updateMonth (Byte)
  •  updateDay (Byte)
  •  numRecords (Int32)
  •  headerLen (Int16)
  • recordLen (Int16)
  • reserved1 (Int16)
  • incompleteTrans (Byte)
  • encryptionFlag (Byte)
  • reserved2 (Int32)
  • reserved3 (Int64)
  • MDX (Byte)
  • language (Byte)
  • reserved4 (Int16)

 
Referencias:

Imports System.IO.Path
Imports System.IO
Imports System.Runtime.InteropServices

Public Class Fox

  Public Structure DBFHeader
        Public version As Byte
        Public updateYear As Byte
        Public updateMonth As Byte
        Public updateDay As Byte
        Public numRecords As Int32
        Public headerLen As Int16
        Public recordLen As Int16
        Public reserved1 As Int16
        Public incompleteTrans As Byte
        Public encryptionFlag As Byte
        Public reserved2 As Int32
        Public reserved3 As Int64
        Public MDX As Byte
        Public language As Byte
        Public reserved4 As Int16
    End Structure

 Shared Function HeaderDBF(ByVal dbfFile As String) As DBFHeader

        Dim br As BinaryReader = New BinaryReader(File.OpenRead(dbfFile))
        Dim buffer() As Byte
        buffer = br.ReadBytes(Marshal.SizeOf(GetType(DBFHeader)))

        Dim handle As GCHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned)
        Dim header As DBFHeader
        header = Marshal.PtrToStructure(handle.AddrOfPinnedObject(), GetType(DBFHeader))
        handle.Free()

        Return header

    End Function

End Class

Modo de uso


  Dim header As New Fox.DBFHeader
  header = Fox.HeaderDBF("C:\Prueba.DBF")

Espero sea de su utilidad y recuerden ante cualquier consulta dejen sus comentarios.

Saludos

También te podría gustar...

6 Respuestas

  1. David Sanchez Rivera dice:

    compañero necesito una ayuda, quiero vaciar los datos de una tabla dbf a una tabla mysql en vb .net

  2. Ruben dice:

    Muchas Gracias Victor.

  3. Ruben dice:

    Lo que sucede es que estaba tratando de pegar el codigo
    Dim directorio As String = System.IO.Path.GetDirectoryName(fichero.Text)
    desde la variable directorio, pero me di cuenta que sale un error por las «»

    La verdad Todavia no entiendo bien como puedo sacar la estructura como presentarlo en un LIsBox o guardarlo en un Txt
    estoy intentandolo pero no lo logro

    Si puedes ayudarme con el codigo adicional estaria agradecido.

    Saludos

    • Si vez en el ejemplo debes llamarlo de la siguiente manera.

      Dim header As New Fox.DBFHeader
      header = Fox.HeaderDBF(«C:\Prueba.DBF»)

      y si quieres pasarlo a un listbox, podría ser utilizando un for each y agregando uno o todos los registros, recuerda que este método recupera una estructura con varios datos entre ellos version , language , numRecords y headerLen.

      entonces puedes hacer lo siguiente

      For Each h in header

      lista.Items.Add(«version: » + h.version + » Tipo: » + h.language)

      Next

      Saludos

  4. Ruben dice:

    Hola amigo me podrias ayudar ya que me sale error
    ‘Dim br As BinaryReader = New BinaryReader(File.OpenRead(dbfFile))’
    exactamente en la variable dbFIle