*.CSV maximale Grösse ?

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

*.CSV maximale Grösse ?

Beitrag von AUGE_OHR »

Frage : wie gross darf eine *.CSV Datei maximal sein :?:

4 GB oder > 4 GB unter 32 Bit Apps / OS :?:
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: *.CSV maximale Grösse ?

Beitrag von brandelh »

das kommt auf das Programm an, das sie erzeugen / lesen soll ...

Aktuell kann Xbase++ mit DBT Dateien umgehen, die größer als 4 GB sind.
Auch die Funktionen, welche FOpen(), FSeek() etc. nutzen können mit mehr als 4 GB umgehen.

Ob die DBE damit klar kommt weiß ich nicht, woher sollen auch die Daten kommen ...
Das Dateisystem muss damit natürlich auch auskommen, also mit NTFS sollte das möglich sein.

Auf meinem Rechner habe ich normale Textdateien erzeugt, die größer als 4 GB waren.
Allerdings habe ich seit Win 7 nur noch die 64 Bit Version des Betriebssystems.

Ich sag mal ... einfach ausprobieren ;-)
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: *.CSV maximale Grösse ?

Beitrag von AUGE_OHR »

hi,

ich kann eine 7 GB Datei "öffnen" aber bei

Code: Alles auswählen

   nHandle := FOpen(cFile, FO_READWRITE+FO_DENYWRITE)
   IF FError() <> 0
      ? "Fehler beim öffnen der Datei:", FError()
   ELSE  
       ? nPos := FSeek( nHandle, 0 , FS_END )
kommt -1 raus :(

---

es gibt von Pablo ein MEMORY Demo > 4 GB

Code: Alles auswählen

#xcommand MEMBER DWORDLONG <cm> => MEMBER DWORD64   <cm>
#xcommand PROPERTY DOUBLE <nd> IS UINT64 MEMBER <uq>   =>;
          INLINE ACCESS ASSIGN METHOD <nd>(v) ;
          ; if( PCount() > 0 ) ;
          ; ::<uq> := Double2ULongLong( v )  ;
          ;   return v ;
          ; end ;
          ;return ULongLong2Double( ::<uq>)
also habe ich es mit ULongLong2Double() versucht ... 2314885530818453000,00 ... :shock:
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: *.CSV maximale Grösse ?

Beitrag von brandelh »

mit welcher Xbase++ Version ?

Anfangs gab es bei der 2.xx da einen Fehler bei FSEEK() der ist aber mittlerweile behoben.
Ich denke bei 1.90 bleibt die Beschränkung auf 4 GB.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: *.CSV maximale Grösse ?

Beitrag von brandelh »

Problem/Issue 6383

Query for PDR ID 6383

Open Build: Open Date: Language:
1.90.331 07/25/2011 (All)
Closed Build: Close Date: Platform:
2.00.430 09/04/2012

im Text steht was von FIX, den man anfordern könnte, eventuell meinen die damit auch die 1.90

Ich meine aber, fopen() und einlesen mit fread() bis zum EOF() ging fehlerfrei, aber ab wann ?
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: *.CSV maximale Grösse ?

Beitrag von AUGE_OHR »

hi

ah ... PDR 6383 bis 2 GB

---

ich habe mal nach FOPEN / FSEEK gesucht und bei Microsoft das gefunden
https://docs.microsoft.com/de-de/cpp/c- ... w=msvc-170
https://docs.microsoft.com/de-de/cpp/c- ... w=msvc-170

Code: Alles auswählen

int fseek(
   FILE *stream,
   long offset,
   int origin
);
int _fseeki64(
   FILE *stream,
   __int64 offset,
   int origin
);
offensichtlich braucht man eine Structure wo die MEMBER mit 64 Bit umgehen können.
des "Rest" scheint gleich zu sein ...
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: *.CSV maximale Grösse ?

Beitrag von brandelh »

genau da war der Fehler drin, aber wie gesagt, mittlerweile geht es.

Hier habe ich einige alte Testprogramme, mit der 1.90.355 zeigt fSeek() den Fehler.
Auch die ersten 2.00 Versionen zeigten den Fehler.
Vermutlich viel das erst auf, als die Dateien tatsächlich größer wurden.

Code: Alles auswählen

**** da gibt es einige OT4XB Funktionen ...

#include "ot4xb.ch"
FUNCTION fsizeX1(nHandle)  // Abfrage aller Dateien Grössen  möglich.
local nRet, oNetR
     oNetR := _Large_Integer():new()
     oNetR:_alloc_()
     nRet := @Kernel32:GetFileSizeEx( nHandle, @oNetR )
     if nRet = 0
        // Fehlerbehandlung: Fehler an dieser Stelle nicht zulässig  --> Log und Programmende
        ** logEXEerror( "GetFileSizeEx")
        quit
     endif
     make_QWord(oNetR:nLowPart,oNetR:nHighPart,@nRet)
     nRet := int(nRet,0)
     oNetR:_free_(.F.)
return(nRet)

FUNCTION fsizeX2(nHandle)  // Abfrage aller Dateien Grössen  möglich.
local nRet, oNetR
     oNetR := _Large_Integer():new()
     oNetR:_alloc_()
     nRet := @Kernel32:GetFileSizeEx( nHandle, @oNetR )
     if nRet = 0
        // Fehlerbehandlung: Fehler an dieser Stelle nicht zulässig  --> Log und Programmende
        ** logEXEerror( "GetFileSizeEx")
        quit
     endif
     make_QWord(oNetR:nLowPart,oNetR:nHighPart,@nRet)
     nRet := round(nRet,0)
     oNetR:_free_(.F.)
return(nRet)

FUNCTION fsizeX3(nHandle)  // Abfrage aller Dateien Grössen  möglich.
local nRet, oNetR
     oNetR := _Large_Integer():new()
     oNetR:_alloc_()
     nRet := @Kernel32:GetFileSizeEx( nHandle, @oNetR )
     if nRet = 0
        // Fehlerbehandlung: Fehler an dieser Stelle nicht zulässig  --> Log und Programmende
        ** logEXEerror( "GetFileSizeEx")
        quit
     endif
     make_QWord(oNetR:nLowPart,oNetR:nHighPart,@nRet)
*     nRet := round(nRet,0)
     oNetR:_free_(.F.)
return(nRet)
BEGIN STRUCTURE _Large_Integer
   MEMBER DWORD nLowPart
   MEMBER DWORD nHighPart
END STRUCTURE
Aber FSIZE() war auch nie das Problem !

Code: Alles auswählen

Test der low level file Funktionen 13:20:53
 Xbase++ Version:  Xbase++ (R) Version 1.90.355
verybig.txt
Größe laut Explorer:      4.154.687.701  (numerisch)
Größe laut Explorer:      4.154.687.701  (string)
Größe laut FSize(c):      4.154.687.701  (Dateiname)
Größe laut FSEEK():        -140.279.595  (numerisch)
Größe laut FSize(h):      4.154.687.701  (mit filehandle) 4154687701
Größe laut FSizeX1(h):    4.154.687.701  (mit filehandle) 4154687701
Größe laut FSizeX2(h):    4.154.687.701  (mit filehandle) 4154687701
Größe laut FSizeX3(h):    4.154.687.701  (mit filehandle) 4154687701,00
Größe laut FSize(n):      4.154.687.701  (über Variable)
Wieder am Anfang:                0

am Ende nochmal 1. Filehandle abfragen:

Größe laut FSize(h):      4.154.687.701  (mit filehandle) 4154687701
Größe laut FSizeX1(h):    4.154.687.701  (mit filehandle) 4154687701
Größe laut FSizeX2(h):    4.154.687.701  (mit filehandle) 4154687701
Größe laut FSizeX3(h):    4.154.687.701  (mit filehandle) 4154687701,00
Gelesen:                  4.154.687.701
Kopiert:                  4.154.687.701

13:21:58  Dauer:           1,07

Code: Alles auswählen


Test der low level file Funktionen 13:35:58
 Xbase++ Version:  Xbase++ (R) Version 2.00.1520
verybig.txt
Größe laut Explorer:      4.154.687.701  (numerisch)
Größe laut Explorer:      4.154.687.701  (string)
Größe laut FSize(c):      4.154.687.701  (Dateiname)
Größe laut FSEEK():       4.154.687.701  (numerisch)
Größe laut FSize(h):      4.154.687.701  (mit filehandle) 4154687701
Größe laut FSizeX1(h):    4.154.687.701  (mit filehandle) 4154687701
Größe laut FSizeX2(h):    4.154.687.701  (mit filehandle) 4154687701
Größe laut FSizeX3(h):    4.154.687.701  (mit filehandle) 4154687701,00
Größe laut FSize(n):      4.154.687.701  (über Variable)
Wieder am Anfang:                0

am Ende nochmal 1. Filehandle abfragen:

Größe laut FSize(h):      4.154.687.701  (mit filehandle) 4154687701
Größe laut FSizeX1(h):    4.154.687.701  (mit filehandle) 4154687701
Größe laut FSizeX2(h):    4.154.687.701  (mit filehandle) 4154687701
Größe laut FSizeX3(h):    4.154.687.701  (mit filehandle) 4154687701,00
Gelesen:                  4.154.687.701
Kopiert:                  4.154.687.701

13:36:45  Dauer:           0,77
wie man sieht, die 2.00.xxx hat seit einigen Versionen kein Problem mehr damit.
Dateianhänge
TestBigFiles.zip
(6.27 KiB) 148-mal heruntergeladen
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: *.CSV maximale Grösse ?

Beitrag von brandelh »

AUGE_OHR hat geschrieben: Mi, 01. Dez 2021 13:35 Frage : wie gross darf eine *.CSV Datei maximal sein :?:
4 GB oder > 4 GB unter 32 Bit Apps / OS :?:
Ich bin mir nicht mehr sicher, was die Grenzen unter Win NT ff. 32 Bit waren,
aber es ist durchaus möglich, dass die fehlenden 64 BIT Register auch die maximale Dateigröße bestimmt haben.
Das wären dann 4 GB gewesen.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: *.CSV maximale Grösse ?

Beitrag von AUGE_OHR »

hi,

ich habe das Sample von Hubert getestet welches eine Datei > 4 GB "verarbeitet" :!:
FOPEN(), FRWITE() und FREAD() sind bei > 4 GB nicht das Problem sondern FSEEK()

---

nun hab ich im Sample von Hubert das gesehen

Code: Alles auswählen

BEGIN STRUCTURE _Large_Integer
   MEMBER DWORD nLowPart
   MEMBER DWORD nHighPart
END STRUCTURE
und habe bei Pablo CLASS TBinFile() gefunden.
leider gibt es keine Beschreibung sondern nur den "C"-Source Code der LIB ...

arbeitet jemand mit TBinFile() und hätte ein Demo :?:
gruss by OHR
Jimmy
Antworten