Probleme mit seekp bei großen Dateien



  • Hey @all,

    vorweg nur zur Info, mit großen Dateien meine ich >= 25 GB

    Mein Problem ist nun das ich nicht weiter seeken kann als bis zum wert von LONG_MAX.

    Wie kann ich in einer 25 GB Datei beispielsweise zum 24GB seeken und danach lesen bzw. schreiben?
    Mit ios::cur hatte ich es schon probiert, komme trotzdem nur bis LONG_MAX

    Hat jemand einen Rat für mich?

    OS: 32 bit von Windows und linux

    Lg _freeze_



  • WinAPI



  • Danke, und ausser WinAPI?

    Wollte nicht die Dateioperationen für beide Systeme schreiben.

    Gibts da nicht auch was ansi kompatibles mit fstream oder den C Funktionen (fopen, usw.) daraus?

    Lg _freeze_



  • habe doch noch eine Lösung gefunden:

    // Für Windows
    // mit fopen öffnen
    _fseeki64(pFile, _offset, SEEK_SET);
    
    // Für Linux
    // mit fopen64 öffnen
    // Kompilieren mit -D __USE_FILE_OFFSET64 -D __USE_LARGEFILE
    _fseeko64(pFile, _offset, SEEK_SET);
    

    der Rest wie fwrite,fread und fclose bleiben gleich

    oder mittels Präprocessor

    FILE *pFile = NULL;
    .
    .
    .
    #if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(__TOS_WIN__)
        pFile = fopen("filename.ext", "rb+");
    #elif defined(linux) || defined(__linux)
        pFile = fopen64("filename.ext", "rb+");
    #endif
    .
    .
    .
        if(pFile != NULL) {
    #if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(__TOS_WIN__)
            _fseeki64(pFile, _offset, SEEK_SET);
    #elif defined(linux) || defined(__linux)
            _fseeko64(pFile, _offset, SEEK_SET);
    #endif
        }
    .
    .
    .
        fclose(pFile);
    

    Lg _freeze_


Anmelden zum Antworten