mikrocontroller.net

Forum: PC-Programmierung fread, fwrite, fopen, fclose ftell, fseek und _read, _write, _open, _close, _lseeki64


Autor: Gustl B. (-gb-)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Frank M. (ukw) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch Moderator
Autor: Gustl B. (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vorher ftell, fseek und die haben nichtmehr richtig funktioniert. Also 
bin ich nach _lseeki64 gegangen aber dann musste ich auch fopen nach 
_open umbauen und so weiter.

Ja, 64 Bit.

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gustl B. (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hatte ich mir in der Tat noch nicht angeguckt, Danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.