[C++] zapis/odczyt do pliku

0

#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;

class operacja
{
public:
    fstream plik;
     int nrlinijki;
     int *a;
    operacja(string sciezka)
    {
        plik.open(sciezka.c_str(), ios::in | ios::out | ios::trunc | ios::binary);
        nrlinijki = 0;
    }
    ~operacja()
    {
        plik.close();
    }

    void zapis(int wartosc);
    int *odczyt(int wartosc);

};

void operacja::zapis(int wartosc)
{
    plik.seekp(nrlinijki*sizeof(int));
    plik.write((char*)&wartosc, sizeof(int));
    cout << "Zapisano" << endl;
    nrlinijki++;

}

int *operacja::odczyt(int wartosc)
{
    cout << "TU" << endl;
    plik.seekg(wartosc*sizeof(int));
    cout << "powskazaniu" << endl;
    plik.read((char*)&a, sizeof(int));
    cout << "Odczytano" << endl;

    return a;
}

int main()
{
    string olek("C:\\Users\\Fryderyk\\Desktop\\plik.tmp");

    operacja *plik;
    plik = new operacja(olek);

    int i;
    cin >> i;
    plik->zapis(i);

    int *x = plik->odczyt(0);

    cout << x << endl;

    delete plik;

    system("PAUSE");
    return 0;
}

ok, mam taki kod źródłowy, testowałem w devie i visualu.
dokładnie chodzi mi o odczyt, bo zapis wydaje się być prawidłowy.
Na ekranie pojawia mi się liczba którą podam podczas zapisu, lecz w zapisie 16-nastkowym + kilka zer z przodu, próbowałem to zmienić manipulatorem "dec", ale nic to nie dało.

Mógłby mi ktoś poradzić gdzie jest problem, co zrobiłem źle?

0

int a na int a;
oraz int
operacja::odczyt(... na int operacja::odczyt(...

Powinieneś też przeprojektować klasę bo masz bajzel:

class operacja
  {
   public:
   fstream plik;
   operacja(string sciezka);
   ~operacja();
   void zapis(int nr,int wartosc);
   int odczyt(int int); 
  };
0

Dzięki wielkie, za rozwiązanie problemu i spostrzeżenia co do klasy:)
Właśnie skończyłem "Symfonie C++" i chciałem zobaczyć czy mi się uda coś zrobić, klasa wiem że burdel, bo to na szybko było.

PS Można zamknąć.

0

Po pierwsze musisz zaalokować wskaźnik a, np. w konstruktorze wpisz:

 a = new int;

a w destruktorze:

 delete a;

W metodzie odczyt zamiast

plik.read((char*)&a, sizeof(int)); 

ma być:

 plik.read((char*)a, sizeof(int));

oraz w funkcji main zamiast:

 cout << x << endl;

ma być:

 cout << *x << endl;

Btw. nie lepiej Ci to na strumieniach robić? Ponadto nie bardzo rozumiem dlaczego nie zwracasz w odczycie przez wartość bez tworzenia składowej a, skoro jest ona używana tylko do odczytu.

Edit:
Heh ubiegł mnie :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0