Handling mit Dateien größer als 4 GByte

Für allgemeine Fragen zur Programmierung mit PureBasic.
IngoMoritz
Beiträge: 5
Registriert: 21.10.2004 17:06

Handling mit Dateien größer als 4 GByte

Beitrag 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
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

Windows 2000/XP mit NTFS statt FAT32 benützen?!

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

c ya,
nco2k
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag 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...
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Beitrag 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).
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
IngoMoritz
Beiträge: 5
Registriert: 21.10.2004 17:06

Dateigröße über 4 GByte feststellen

Beitrag 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.
NetSlayer
Beiträge: 117
Registriert: 21.09.2004 21:18
Kontaktdaten:

Beitrag 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.
...MfG, NetSlayer
"No, I ain't got a problem. It's you with the problem!"
http://netslayer.scpn.net
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Beitrag von GPI »

Es gibt eine API-Funktion die mit LongLongs arbeitet.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benubi
Beiträge: 187
Registriert: 22.10.2004 17:51
Wohnort: Berlin, Wedding

Beitrag 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 :)
coldarchon
Beiträge: 26
Registriert: 08.09.2004 09:33
Kontaktdaten:

Beitrag von coldarchon »

benutzt Du XP, da ist doch die Speicherverwaltung auf 4 GB begrenzt, vielleicht auch bei Dateien ..
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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.
Antworten