Witam, mam pewien problem z zapisem danych do pliku binarnego. Otóż próbuję to zrobić przekazując zmienną fstream do funkcji poprzez referencję. Program się kompiluje bez problemów. Natomiast żadne dane do pliku nie są zapisywane. Plik ma rozmiar 0KB , a jak otworzyłem go w edytorze do edycji plików .bin również była pustka. Bawiłem się z prawami dostępu w folderze i pliku, niestety na nic się do nie zdało. Dlatego musi coś być nie tak z moim kodem, ale nie mam pojęcia co to może być. Próbowałem przekazać zmienną poprzez wskaźnik oraz referencję, nadal to samo. Przekazanie zmiennej poprzez kopiowanie(normalnie) kończy się wysypaniem kilku błędów w kompilatorze. Staram się unikać używania zmiennych globalnych. Zamieszczam tylko fragment kodu,który jest odpowiedzialny za zapis do pliku.Przejścia do kolejnych funkcji podświetliłem. Z góry bardzo dziękuję za pomoc.
int main()
{
fstream file;
file.open("data.bin",ios::in | ios::out | ios::binary);
int quant_of_blocks = 0;
int selected_N_block = 0;
Data *selected_block = NULL;
if (file.is_open())
cout << "Otworzono plik!" << endl;
else
{
cout << "Nie udalo sie otworzyc pliku, wychodze z programu" << endl;
return 0;
}
vector<Data*> Data_table;
for (int i = 0 ;i < 2; i++)
{
if (selected_block != NULL)
menu_loop(Data_table,&selected_N_block,&quant_of_blocks,file);
else
{
char decision;
cout << "Nie stworzono zadnego bloku danych, opcje menu sa niedostepne" << endl;
cout << "Stworzyc pierwszy blok danych?(y -tak, inny znak - nie)" << endl;
cin >> decision;
if ((decision == 'y')||(decision == 'Y'))
{
Data_table.push_back(create_new_data_block());
quant_of_blocks = 1;
selected_block = Data_table[0];
}
else
{
cout << "Wychodze z programu" << endl;
}
}
}
file.close();
return 0;
}
void menu_loop(vector<Data*> Data_table,int* selected_N_block,int* quant_of_blocks,fstream &file)
{
for (;;)
{
if (quant_of_blocks == 0)
break;
switch(Menu(Data_table[*selected_N_block]))
{
case 1:
{
Data_table.push_back(create_new_data_block());
(*quant_of_blocks)++;
break;
}
case 2:
{
if ((*selected_N_block < 0)||(*selected_N_block >= *quant_of_blocks))
cout << "Nie wybrano zadnego bloku danych" << endl;
else
{
system("pause");
Data_table[*selected_N_block]->save_to_file(file);
}
break;
}
case 3:
{
cout << "Wybierz numer bloku danych : ";
int buffer ;
cin >> buffer;
if (( (buffer) >= 1 ) & ( (buffer) <= *quant_of_blocks))
{
*selected_N_block = buffer - 1;
}
else
{
cout << "Nie ma bloku o takim numerze" << endl;
system("pause");
}
break;
}
case 4:
{
show_all_data(Data_table,*quant_of_blocks);
break;
}
default :
{
cout << "Brak takiego polecenia" << endl;
system("pause");
}
}
}
}
void Data::save_to_file(fstream &file)
{
/// 1-score int OK
if (file.write(reinterpret_cast<char*>(&score),sizeof(score)))
{
cout <<score<< endl;
cout << "1ok" << endl;
system("pause");
}
/// 2-club string
file.write(club.c_str(),length_club + 1);
/// 3-club length int
file.write(reinterpret_cast<char*>(&length_club),sizeof(length_club));
cout << "2ok" << endl;
system("pause");
/// 4-name string
file.write(name.c_str(),length_name + 1);
/// 5-name length int
file.write(reinterpret_cast<char*>(&length_name),sizeof(length_name));
cout << "3ok" << endl;
system("pause");
/// 6-zamkniêcie
file.write("#",sizeof("#"));
if_saved = true;
}