Seite 1 von 2

Handling mit Dateien größer als 4 GByte

Verfasst: 21.10.2004 17:12
von IngoMoritz
Hallo Leute,

ich bin noch ziemlich neu im Umgang mit PB.
Ich habe mir ein Programm geschrieben womit ich mir eine Große datei aufteilen (z.B. in 700 MByte Stücke), auf CD-Brennen und andernorts wieder zusammensetzen kann. Leider habe ich ziemlich schnell festgestellt, das es nicht möglich ist mit Dateien die größer als 4 GByte sind zu arbeiten. Eine 5 GByte Datei wird so behandelt, als wenn sie nur 1 GByte groß ist.
Gibt es irgendeine Möglichkeit mit Dateien zu Arbeiten, die Größer als 4 GByte sind?

Gruß Ingo

Verfasst: 21.10.2004 17:22
von nco2k
Windows 2000/XP mit NTFS statt FAT32 benützen?!

mehr fällt mir leider auch nicht ein. :lol:

c ya,
nco2k

Verfasst: 21.10.2004 17:34
von Ynnus
Ich glaube, es liegt nich am OS sondern an den 32 Bit für die Variablen... Kann das sein, dass da irgendsowas war, dass man double mit 64 bit benötigt für Dateien größer 4 GB? Oder war das intern in PB irgend ein Fehler dass dateien beim Einladen falsch erkannt werden, wenn sie größer 4 GB waren? Irgendwas gabs da schonmal...

Verfasst: 21.10.2004 18:32
von GPI
Sunny hat geschrieben:Ich glaube, es liegt nich am OS sondern an den 32 Bit für die Variablen... Kann das sein, dass da irgendsowas war, dass man double mit 64 bit benötigt für Dateien größer 4 GB?
Double definitiv nicht. Double = große variante von Floats = Schätzwerte! NIEMALS, WIRKLICH NIEMLAS FLOATS VERWENDEN, WENN GENAUIGKEIT WICHTIG IST (Währungen bsw.).

Eher DoubeLongs, LongLongs, 64-Bit-Integer (oder wie du die teile Nennen willst).

Und momentan nur per api. (Routinen für LongLongs-Behandlung (Addieren, Subtrahieren, Multiplizieren, Str, Vergleich), bitte in alten forum mit longlongs suchen).

Dateigröße über 4 GByte feststellen

Verfasst: 23.10.2004 10:19
von IngoMoritz
Eigenlich meinte ich wie man feststellen kann daß eine Datei größer als 4 GByte ist. Mit GetFileSize_ , FileSize oder Lof kann man nur bis 4 GByte agieren, wenn eine Datei 5 GByte groß ist wird mit diesen Funktionen angezeigt das sie nur 1 GByte hat.

Verfasst: 23.10.2004 14:24
von NetSlayer
Ja, das hat denselben Grund wie das, was GPI erklärt hat; die Long- Variablen von PureBasic können nur Zahlen von -2 Milliiarden bis zu +2 Milliarden speichern. Wenn diese Werte über- oder unterschritten werden, wird am anderen Ende wieder neu angefangen zu zählen.

Verfasst: 23.10.2004 15:55
von GPI
Es gibt eine API-Funktion die mit LongLongs arbeitet.

Verfasst: 23.10.2004 22:28
von Benubi
hallo,

ich kann nicht wirklich einen genauen tip geben,

aber vielleicht siehst du dir das "gravitation" programm an.

Dort gibt es viele 64bit Funktionen, aber da es auch viel mit assembler drin ist, weiss ich nicht ob es portabel ist... jedenfalls könnte das dann sehr interessant sein:

Du findest Gravitation bei purebasic.de:
"Gravitation Version 1.08"
http://www.purebasic.de/ [programmgallerie]

hoffentlich bringts was :)

Verfasst: 25.10.2004 14:43
von coldarchon
benutzt Du XP, da ist doch die Speicherverwaltung auf 4 GB begrenzt, vielleicht auch bei Dateien ..

Verfasst: 25.10.2004 15:05
von Zaphod
ich glaube auch das das eine einschränkung von windows (und linux auf x86_32) ist. das liegt daran, dass man mit einem einzelnen 32 bit register nicht mehr als 4GB addressieren kann. das ist der eigentliche grund für den wechsel auf 64 bit... die inzwischen engen addressräume.