vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Re: Datei > 2GB öffnen 
Autor: NewPiper
Datum: 31.01.06 15:50

Es geht mir zwar nicht um den Code, sondern darum wie ich eine Datei einlesen kann die größer als 2 GigaByte ist, aber zur verdeutlichung nochmal die ganze Function:

Public Function Read_File(sDatei As String)
On Error GoTo Err_Read_File
  Dim F As Integer
  Dim sInhalt As String
  Dim cSize As Currency
  Dim lSN As Currency
  Dim lSteps As Long
  Dim cZwoGig As Currency
 
  If Dir$(sDatei, vbHidden + vbSystem) = "" Then Exit Function
 
  lSteps = 1048576 ' entspricht 1MB
  cZwoGig = 2146435072 'kurz befohr der Fehler kommt
  F = FreeFile
  Open sDatei For Binary Access Read As #F
    cSize = nLOF(F)
    If cSize = -1 Then GoTo Exit_Function
    sInhalt = Space$(lSteps)
    Do While sInhalt <> ""
      If (lSN) >= cZwoGig Then MsgBox "Achtung: Gleich kommt der Fehler"
      If lSN + Len(sInhalt) > cSize Then sInhalt = Space(cSize - lSN + 1)
      Get #F, , sInhalt
      Call CheckInhalt(sInhalt) 'Function zum verarbeiten des Inhaltes
      lSN = lSN + Len(sInhalt)
      DoEvents
    Loop
 
GoTo Exit_Function
 
Err_Read_File:
  If MsgBox("Es ist ein Fehler aufgetreten" & vbNewLine & Err.Description & _
    vbNewLine & "Vorgang Wiederholen?", vbYesNo, "Fehlernummer: " & Err.Number) _
    = vbYes Then _
      Resume
 
Exit_Function:
  Close #F
 
End Function
 
'Diese Funktion ermittelt die größe einer datei, auch wenn sie über 2GB ist
Private Function nLOF(FileNR As Integer) As Currency
On Error Resume Next
 
  Dim lValue As Long
  Dim nSize As Currency
 
  lValue = LOF(FileNR)
  If lValue < 0 Then
    nLOF = 2147483648# + (2147483648# - Abs(lValue))
    If Err.Number > 0 Then nLOF = -1: Exit Function
  Else
    nLOF = lValue
  End If
 
End Function
Dieser Code liest die Datei MB für MB aus, da es keinen sinn macht eine GigaByte große datei komplett in einen String zu laden. ich weiß auch nicht ob das funktionieren würde.

Wenn du den Code mal mit einer Datei ausprobiert, die größer als 2GB ist, kommt folgender Fehler:


Fehlernummer: 63
Falsche Datensatznummer


Wie also kann ich den Fehler umgehen, und eine Datei über 2 GigaByte, wie im obigem Code, stück für stück einlesen.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Datei > 2GB öffnen2.111NewPiper31.01.06 12:35
Re: Datei > 2GB öffnen1.611OldMan31.01.06 14:11
Re: Datei > 2GB öffnen1.703NewPiper31.01.06 15:50
Re: Datei > 2GB öffnen1.604That31.01.06 15:49
Na Klar, Mach ich, insofern ich was rausbekomme1.794NewPiper31.01.06 15:53
Re: Datei > 2GB öffnen1.592Joerg02.02.06 13:40
Re: Datei > 2GB öffnen1.533That02.02.06 13:45
Re: Datei > 2GB öffnen1.530Joerg02.02.06 13:55
Re: Datei > 2GB öffnen1.539TheNukeduke02.02.06 14:58
Re: Datei > 2GB öffnen1.584Joerg02.02.06 16:28
Re: Datei > 2GB öffnen1.554TheNukeduke02.02.06 16:45
Re: Datei > 2GB öffnen1.834TheNukeduke30.09.06 00:47
Re: Datei > 2GB öffnen1.523Fex02.10.06 21:18
Datei > 2GB öffnen1.562NewPiper03.10.06 13:36
Re: Datei > 2GB öffnen1.564Fex03.10.06 14:51
Re: Datei > 2GB öffnen1.615TheNukeduke03.10.06 16:14
clsFile.cls1.674NewPiper03.10.06 17:17

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel