Gesamte Datei in BYTEpointer einlesen und größe in size_t festhalten



  • Meine Versionen führen immer zu Access Violates, warscheinlich weil ich die größe der datei nicht richtig bestimme.

    Bitte helft mir ich kenne mich nicht mit fread aus 😞

    Warscheinlich ziemlich falscher code:

    ofile=fopen(inbounds.at(i),"r");
    
    	filesize=fread(file,1,-1,ofile);
    	fclose(ofile);
    


  • Vermutlich ist dein Buffer file nicht gross genug. So ermittelt man aber auch nicht die Grösse einer Datei. Das ist wie mit Kanonen auf Spatzen zu schiessen. Man setzt einfach den Dateizeiger ans Ende.

    fseek(stream, 0, SEEK_END);
    

    Es ist allerdings nicht garantiert, dass eine Implementation SEEK_END für eine Datei, geöffnet im Binärmodus, auch unterstützt. Mit ftell liest man dann die Position und erhält somit die Länge.
    Da wir allerdings im C++ Forum sind, sind hier eher File Streams das Mittel der Wahl.



  • Der 3. Parameter bei fread gibt die Nummer der zu lesenden Einträge an. Sicher das dieser Parameter -1 sein darf?
    Ansonsten, warum verwendest du nicht std::fstream, oder std::ifstream?

    grüße



  • Nunja, der dritte Parameter ist ja size_t, also vorzeichenlos. -1 wird also der grösste size_t Wert. Er will damit einfach die maximale Anzahl an Zeichen lesen. Aber wie ich bereits sagte, diese Vorgehensweise ist nicht empfehlenswert.



  • mit google kannst auch du es schaffen


Anmelden zum Antworten