fread, fwrite, fopen, fclose ftell, fseek und _read, _write, _open, _close, _lseeki64

OP #5759713
Lesenswert?

Hallo,

ich habe erstmals in C mit großen Datei zu tun für die 32 Bits nicht 
ausreichen. Jetzt hatte ich immer diese f**** Funktionen verwendet wie 
fopen, fseek, ... aber die funktionieren jetzt nicht mehr. Nach etwas 
Googelei habe ich die _**** Funktionen von Microsoft gefunden. Das 
funktioniert auch alles ganz fein, aber es ist langsam. Ich habe nur die 
Funktionen ersetzt und die Datenrate bricht in etwa auf die Hälfte ein, 
sogar etwas drunter.

Gibt es da was brauchbareres modernes? Ich verwende Codeblocks mit dem 
MinGW Compiler auf Windows10.

Vielen Dank!
Moderator Persönliche Seite #5759729
Lesenswert?

Gustl B. schrieb:
> ich habe erstmals in C mit großen Datei zu tun für die 32 Bits nicht
> ausreichen. Jetzt hatte ich immer diese f**** Funktionen verwendet wie
> fopen, fseek, ... aber die funktionieren jetzt nicht mehr.

Welche Funktionen hast Du denn vorher benutzt und warum funktionieren 
die bisher genutzten Funktionen bei großen Dateien nicht mehr?

> Windows10.

Ich nehme an: 64 bit.
Persönliche Seite #5759734
Lesenswert?

Gustl B. schrieb:
> Gibt es da was brauchbareres modernes?

Du könntest direkt die Funktionen aus der Win32-API verwenden.

CreateFile, SetFilePointer, ReadFile, WriteFile etc.

Die sehen schon seit Jahrzehnten auch eine Unterstützung für Dateigrößen 
jenseits der 4-GB-Grenze vor.

https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-createfilea

https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-setfilepointer

Sofern Du Dateien nur liest, oder aber beim Schreiben die Größe nicht 
änderst, könntest Du auch mit memory mapped files arbeiten.

https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-createfilemappinga

https://docs.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-mapviewoffile

... um nur ein paar Einstiegspunkte zu nennen.

 - die werden

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren