fread und Dateien > 4GB
-
Hallo,
ich möchte Dateien auslesen, die größer sind als 4 GB (unter 32bit-Windows). Dazu will ich fread() & Co verwenden. Da diese Funktionen aber mit size_t für Größenangaben arbeiten und size_t bei mir nur 32bit groß ist, versagen alle meine Programme ab 4 GB.Weiß jemand, wie es richtig geht?
Mr Train
-
wie willst du mehr als 4GB auf einem 32 Bit System aufeinmal in den Speicher laden? Musst halt teile einlesen.
-
Ich will die Datei Stück für Stück an einen anderen PC senden. Aber vorher will ich ermitteln, wie groß die Datei ist.
fseek(f, 0, SEEK_END); FileSize = ftell(f);FileSize muss dabei > 32bit sein.
-
musst halt auf denn neuen C++
Standard warten.
-
Wenns sowieso für win ist dann:
http://msdn.microsoft.com/en-us/library/aa364955(VS.85).aspx
-
Die fread-Funktion ist soweit ich weiß ja noch nichtmal C++, sondern C.
Trotzdem muss es doch eine Lösung für das Problem geben, ich bin wahrscheinlich nicht der Erste damit.
-
-
OK, danke erstmal. Ich bastel damit erstmal 'n bisschen rum.
Mr Train
-
OK, folgendes Problem:
1. Wie konvertiere ich ein int zu LARGE_INTEGER?
2. Wie kann ich einem LARGE_INTEGER einen Wert zuweisen? (mit dem Zuweisungsoperator = geht's ja nicht)Mr Train
-
LARGE_INTEGER i; int j = 10; i.LowPart = j;
-
Die Funktionen GetFileSize() und GetFileSizeEx() erwarten als Parameter jeweils ein HANDLE für die Datei. Ich hab schon ausprobiert, ob auch ein FILE-Objekt geht, aber das scheint nich der Fall zu sein. Gibt es nicht eine Möglichkeit, ein HANDLE aus dem FILE zu erzeugen?
Mr Train
-
So ein handle holt man sich normalerweise mit CreateFile.
Fragen zu diesen Funktionen passen jetzt aber eher in das WinAPI-Forum.