Avatar billede d34c0n Praktikant
09. juni 2003 - 11:09 Der er 6 kommentarer og
1 løsning

ifstream og ofstream?

Hejsa. Kan nogen sige mig hvorfor følgende stykke kode ikke kan indlæse værdierne fra min fil men kun kan skrive dem ud til den?

/*********************************************************/
/***************  ---> START OF:          ***************/
/***************  Deacon's Config System  ***************/
/***************  http://www.macrotech.dk  ***************/
/*********************************************************/

class cfg_system
{
private:
    char *cfg_file;
    char *variable;
    float value;
    ifstream read;
    ofstream write;

public:
    void load(void)
    {
        cfg_file = "flamegl.cfg";
        read.open (cfg_file);
        while (read >> variable >> value)
        {
            if (!strcmp(variable, "wallhack"))    { wallhack        = (int)value;    }
            if (!strcmp(variable, "entity"))    { entity        = (int)value;    }
            if (!strcmp(variable, "modalwire")) { modalwire        = (int)value;    }
            if (!strcmp(variable, "crosshair"))    { crosshair        = (int)value;    }
            if (!strcmp(variable, "mouse2"))    { mouse2        = (int)value;    }
            if (!strcmp(variable, "lambert"))    { lambert        = (int)value;    }
            if (!strcmp(variable, "Credits"))    { Credits        = (int)value;    }       
            read.close();
        }
    }

    void save(void)
    {
        cfg_file = "flamegl.cfg";
        write.open (cfg_file);
        write <<  "wallhack "    << (int)wallhack    << endl;
        write <<  "entity "        << (int)entity        << endl;
        write <<  "modalwire "    << (int)modalwire    << endl;
        write <<  "crosshair "    << (int)crosshair    << endl;
        write <<  "mouse2 "        << (int)mouse2        << endl;
        write <<  "lambert "    << (int)lambert        << endl;
        write <<  "Credits "    << (int)Credits        << endl;
    }
} settings;

/*********************************************************/
Avatar billede arne_v Ekspert
09. juni 2003 - 12:44 #1
Det bliver et gæt: du har ikke lukket filen efter at du har
skrevet inden du åbner den igen for at læse.
Avatar billede arne_v Ekspert
09. juni 2003 - 12:45 #2
void save(void)
    {
        cfg_file = "flamegl.cfg";
        write.open (cfg_file);
        write <<  "wallhack "    << (int)wallhack    << endl;
        write <<  "entity "        << (int)entity        << endl;
        write <<  "modalwire "    << (int)modalwire    << endl;
        write <<  "crosshair "    << (int)crosshair    << endl;
        write <<  "mouse2 "        << (int)mouse2        << endl;
        write <<  "lambert "    << (int)lambert        << endl;
        write <<  "Credits "    << (int)Credits        << endl;
        write.close(); // <--------------------
    }
Avatar billede arne_v Ekspert
09. juni 2003 - 12:45 #3
Og tilsvarende skal read også closes.
Avatar billede arne_v Ekspert
09. juni 2003 - 20:10 #4
svar
Avatar billede d34c0n Praktikant
14. juni 2003 - 20:20 #5
Det har ikke hjulpet noget at sætte en close på overhovedet!
Avatar billede segmose Nybegynder
14. juni 2003 - 20:29 #6
Kalder du overhovedet read, hvis ja indsæt nogle passende cout/messagebox fx.

void load(void) {
  cfg_file = "flamegl.cfg";
  read.open (cfg_file);
// checker du for om filen er åben??? hvad nu hvis den ikke findes???
  cout << "load" << endl;
  while (read >> variable >> value) {
    cout << variable << value << endl;
            if (!strcmp(variable, "wallhack"))  { wallhack = (int)value; }
            if (!strcmp(variable, "entity"))    { entity = (int)value; }
            if (!strcmp(variable, "modalwire")) { modalwire = (int)value; }
            if (!strcmp(variable, "crosshair")) { crosshair = (int)value; }
            if (!strcmp(variable, "mouse2"))    { mouse2 = (int)value;    }
            if (!strcmp(variable, "lambert"))  { lambert = (int)value;    }
            if (!strcmp(variable, "Credits"))  { Credits = (int)value;    }     
            read.close();
        }
    }
Avatar billede arne_v Ekspert
14. juni 2003 - 22:15 #7
Den her version (med de angiven rettelser) virker hos mig:

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int wallhack, entity, modalwire, crosshair, mouse2, lambert, Credits;

char buf[100];

/*********************************************************/
/***************  ---> START OF:          ***************/
/***************  Deacon's Config System  ***************/
/***************  http://www.macrotech.dk  ***************/
/*********************************************************/

class cfg_system
{
private:
    char *cfg_file;
    char *variable;
    float value;
    ifstream read;
    ofstream write;

public:
    void load(void)
    {
        cfg_file = "flamegl.cfg";
        variable = buf; // <----
        read.open (cfg_file);
        while (read >> variable >> value)
        {
            if (!strcmp(variable, "wallhack"))    { wallhack        = (int)value;    }
            if (!strcmp(variable, "entity"))    { entity        = (int)value;    }
            if (!strcmp(variable, "modalwire")) { modalwire        = (int)value;    }
            if (!strcmp(variable, "crosshair"))    { crosshair        = (int)value;    }
            if (!strcmp(variable, "mouse2"))    { mouse2        = (int)value;    }
            if (!strcmp(variable, "lambert"))    { lambert        = (int)value;    }
            if (!strcmp(variable, "Credits"))    { Credits        = (int)value;    }     
            //read.close(); // <----
        }
        read.close(); // <----
    }

    void save(void)
    {
        cfg_file = "flamegl.cfg";
        variable = buf; // <----
        write.open (cfg_file);
        write <<  "wallhack "    << (int)wallhack    << endl;
        write <<  "entity "        << (int)entity        << endl;
        write <<  "modalwire "    << (int)modalwire    << endl;
        write <<  "crosshair "    << (int)crosshair    << endl;
        write <<  "mouse2 "        << (int)mouse2        << endl;
        write <<  "lambert "    << (int)lambert        << endl;
        write <<  "Credits "    << (int)Credits        << endl;
        write.close(); // <----
    }
} settings;

/*********************************************************/

int main()
{
    wallhack = 1;
    entity = 2;
    modalwire = 3;
    crosshair = 4;
    mouse2 = 5;
    lambert = 6;
    Credits = 7;
    settings.save();
    wallhack = 0;
    entity = 0;
    modalwire = 0;
    crosshair = 0;
    mouse2 = 0;
    lambert = 0;
    Credits = 0;
    settings.load();
    cout << wallhack << endl;
    cout << entity << endl;
    cout << modalwire << endl;
    cout << crosshair << endl;
    cout << mouse2 << endl;
    cout << lambert << endl;
    cout << Credits << endl;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester