Modernes C++ programmieren

Okt 23, 2024

lst-0580-godb.cpp

//#(compile) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// https://godbolt.org/z/3P9ToPEYq 
std::vector<char> leseDatei(const string& fName) {
    std::ifstream file{ fName, std::ifstream::binary };
    if(!file) throw std::runtime_error("Fehler beim Oeffnen der Eingabe");
    file.seekg(0, file.end);          // ans Dateiende springen
    const auto laenge = file.tellg(); // aktuelle Position ist Dateigröße
    if(laenge > 1024*1024*1024)
        throw std::runtime_error("Nicht mehr als 1 GB bitte");
    file.seekg(0, file.beg);          // zurück an den Anfang
    std::vector<char> data(laenge);   // Platz schaffen
    file.read(data.data(), laenge);   // in einem Rutsch lesen
    return data;                      // wird nicht kopiert (Stichwort: RVO)
}
void packe(const string& fNameIn, const string& fNameOut) {
    auto data = leseDatei(fNameIn);   // lese Eingabe
    GzWriteStream gz{fNameOut};       // initialisiere Ausgabe
    gz << data;
}