Größe einer Datei herausfinden(C++)

the_undertaker

Erfahrenes Mitglied
Hallo,

ich komme mit einer Funktion, die die Größe einer Textdatei herausfinden soll nicht weiter. Beim ersten Aufruf funktioniert sie, beim 2. Aufruf gibt sie aber -1 zurück, was falsch ist. Hier mal Auszüge aus meinem Code (es soll ein Mini-Schachprogramm werden, ist auch noch nicht vollständig, mir kommt es auf die Funktion GetDateigroesse() an):
C++:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <ctime>
using namespace std;
 
//...
fstream verbotfile("Zugverbote.txt",ios::in|ios::out|ios::binary);
long dateigroesse;
//...
long GetDateigroesse();
 
int main()
{
    srand(unsigned(time(NULL)));
    short x;
    while(1)
    {
        gewonnen=0;
        for(x=0; x<=2; x++)
            schachfeld[x][0]=2;//2=weiß
        for(x=0; x<=2; x++)
            schachfeld[x][1]=32;//32=leer
        for(x=0; x<=2; x++)
            schachfeld[x][2]=1;//1=schwarz
        dateigroesse=GetDateigroesse();
        /*Hier wird dateigroesse beim 2. Durchlauf -1, vorher funktionierts*/
        char ***verbotenezuege=new char**[dateigroesse/12];
        for(short x=0; x<dateigroesse/12; ++x)
            verbotenezuege[x]=new char*[12];
        for(short x=0; x<dateigroesse/12; ++x)
            for(short y=0; y<4; ++y)
                verbotenezuege[x][y]=new char[3];
        VerboteAusDatei(verbotenezuege);
        while(1)
        {
            SpielfeldAusgabe();
            BenutzerZug();
            amzug=2;
            GewonnenTest();
            if(gewonnen==2)
            {
                SpielfeldAusgabe();
                VerboteInDatei(verbotenezuege);
                cout<<"Du hast gewonnen!\n";
                break;
            }
            gewonnen=0;
            SpielfeldAusgabe();
            ComputerZug();
            amzug=1;
            GewonnenTest();
            if(gewonnen==1)
            {
                SpielfeldAusgabe();
                VerboteInDatei(verbotenezuege);
                cout<<"Du hast verloren!\n";
                break;
            }
            
        }
        cout<<"Noch eine Partie spielen (j/n)? ";
        char ans;
        cin>>ans;
        if(ans!='j'&&ans!='J')
            break;
        for(short x=0; x<dateigroesse/12; ++x)
            for(short y=0; y<4; ++y)
                delete[] verbotenezuege[x][y];
        for(short x=0; x<dateigroesse/12; ++x)
            delete[] verbotenezuege[x];
        delete[] verbotenezuege;
    }
    return 0;
}
//...
long GetDateigroesse()
{
    verbotfile.seekg(0, ios::end);
    return verbotfile.tellg();
}

Kann mir da jemand helfen?
 
Hi.

Ich nehme mal an, du verwendest den Stream noch in anderer Weise. Dadurch wird der Stream vermutlich in einen Fehlerzustand versetzt und deswegen gibt tellg -1 zurück.

C++:
verbotfile.clear();
... könnte helfen.

Gruß
 
Zurück