falsche ausgabe, warum?



  • Warum kriege ich hier immer falsche werte zurück?

    #include <iostream>
    #include <fstream>
    #include <windows.h>
    #include <iomanip>
    #include <conio.h>
    using namespace std;
    
    int main(){
        cout << "Programstructure---\n\n";
        fstream in("C:\\a.exe", ios_base::binary);
        ofstream of("C:\\a.exe");
        in.seekg(0L,ios_base::end);
        unsigned long size = streamoff(in.tellg());
        cout << "current size: " << size;
        of << "111111";
        of.close();
        in.seekp(0L,ios_base::end);
        unsigned long Asize = streamoff(in.tellg());
        cout << "\nnew size: " << Asize;
        double percent = (Asize / size) * 100;
        cout << "\n%: " << setprecision(2) << fixed << percent << "%";
        Sleep(10000);
        getch();
    }
    


  • Könntest du auch sagen was für falsche Werte du bekommst?



  • viel zu hohe. und beide sind gleich.. und bei % ist es immer 100%



  • Hast du schonmal geguckt, ob die Dateien richtig geöffnet wurden?

    z.B. so:

    assert(in);
    

    oder so

    if(!in) { cerr << "Fehler!"; return 1; }
    

    mfg.



  • Es meldet einen Fehler. Übrigens kann ich nach der Programmausführung nicht mehr das Zielprogramm(a.exe) löschen.



  • tokto schrieb:

    Es meldet einen Fehler.

    Und welchen Fehler?

    tokto schrieb:

    Übrigens kann ich nach der Programmausführung nicht mehr das Zielprogramm(a.exe) löschen.

    Versuch mal

    in.close();
    

    am Ende.



  • EEK schrieb:

    tokto schrieb:

    Es meldet einen Fehler.

    Und welchen Fehler?

    wahrscheinlich ein assert

    tokto schrieb:

    Übrigens kann ich nach der Programmausführung nicht mehr das Zielprogramm(a.exe) löschen.

    Versuch mal

    in.close();
    

    am Ende.

    Wird automatisch vom Destrkutor gemacht.

    mfg.



  • Was mir gerade auffällt:

    fstream in("C:\\a.exe", ios_base::binary);
    

    Dabei wird weder das ios::in noch das ios::out bit gesetzt! Versuch mal folgendes:

    ifstream in("C:\\a.exe", ios_base::binary);
    

    Außerdem solltest du die gleiche datei nicht gleichzeitig zweimal öffnen.

    mfg.



  • double percent = (Asize / size) * 100;
    

    ist unsinning, da (Asize / size) immer ein ganzzahliger Wert ist.

    Besser:

    double percent = (static_cast<double> (Asize) / size) * 100;
    

Log in to reply