[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