*.CSV maximale Grösse ?
Moderator: Moderatoren
- brandelh
- Foren-Moderator
- Beiträge: 15703
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: *.CSV maximale Grösse ?
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
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
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12912
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: *.CSV maximale Grösse ?
hi,
ich kann eine 7 GB Datei "öffnen" aber bei
kommt -1 raus
---
es gibt von Pablo ein MEMORY Demo > 4 GB
also habe ich es mit ULongLong2Double() versucht ... 2314885530818453000,00 ...
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 )
---
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>)
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15703
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: *.CSV maximale Grösse ?
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.
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
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15703
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: *.CSV maximale Grösse ?
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 ?
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
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12912
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: *.CSV maximale Grösse ?
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
offensichtlich braucht man eine Structure wo die MEMBER mit 64 Bit umgehen können.
des "Rest" scheint gleich zu sein ...
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
);
des "Rest" scheint gleich zu sein ...
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15703
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: *.CSV maximale Grösse ?
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.
Aber FSIZE() war auch nie das Problem !
wie man sieht, die 2.00.xxx hat seit einigen Versionen kein Problem mehr damit.
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
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
- Dateianhänge
-
- TestBigFiles.zip
- (6.27 KiB) 156-mal heruntergeladen
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15703
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: *.CSV maximale Grösse ?
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
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12912
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: *.CSV maximale Grösse ?
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
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
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
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
Jimmy