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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.