Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Daten / Dateien / ConvertFile

DOS-Dateien nach Windows (und umgekehrt)

Werden Dateien sowohl von Windows-Programmen (z.B. via VB) als auch auf DOS-Ebene bearbeitet, so müssen die unterschiedlichen Zeichensätze beachtet werden. Die unten vorgestellte Routine konvertiert eine Datei von DOS- in die Windows-Darstellung (falls Parameter AsWin = True; dies ist die Voreinstellung) bzw. auch umgekehrt (AsWin = False).

Es werden folgende API-Funktionen im Deklarationsteil des Moduls benötigt:
Private Declare Function OemToCharA Lib "user32" ( _
    ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Private Declare Function CharToOemA Lib "user32" ( _
    ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Der eigentliche Code zur Block-weisen Umsetzung einer Datei sieht so aus:
Sub ConvertFile( _
    ByRef Path As String, _
    Optional ByVal AsWin As Boolean = True _
  )
  Dim hFile As Long
  Dim sOrg As String
  Dim sConv As String
  Dim nPos As Long
  
  'Blockweise konvertieren:
  sOrg = Space$(4096)
  sConv = sOrg
  hFile = FreeFile
  Open Path For Binary As #hFile
    For nPos = 1 To LOF(hFile) Step Len(sOrg)
      If nPos > LOF(hFile) - Len(sOrg) Then
        'Restblock-Größe bestimmen:
        sOrg = Space$(LOF(hFile) - nPos + 1)
        sConv = sOrg
      End If
      Get #hFile, , sOrg
      If AsWin Then
        'DOS -> Windows:
        OemToCharA sOrg, sConv
      Else
        'Windows -> DOS:
        CharToOemA sOrg, sConv
      End If
      If sOrg <> sConv Then Put #hFile, nPos, sConv
    Next nPos
  Close #hFile
End Sub

© Jost Schwider, 07.12.2000-07.12.2000 - http://vb-tec.de/convfile.htm