Witam,
piszę program, który ma zarządzać pewnymi plikami. I w pewnym momencie natrafiłem na problem, gdyż całość działa poprawnie, jednak jeden element, w zasadzie ostatni, już nie. Program ten dysponuje nieokreśloną ilością plików. W tym jeden z nich musi mieć nazwę weapon, aby gra mogła go odnaleźć, natomiast reszta to podobne pliki, lecz zmodyfikowane, i właśnie po to mi ten program, do sprawnego zarządzania tymi plikami.
Wygląda to tak, że inne pliki mają przypisany do siebie numer, a program zamieniając te pliki, zapisuje w pliku konfiguracyjnym, dane o tym, który weapon jest właśnie aktywny (aby uniknąć błędu, i aby można było mu z powrotem nadać numerek przy zmianie), numery wszystkich (aby uniknąć podmiany nieistniejących plików), a także nazwy tych plików, które są wyświetlane podczas wyboru weapona w menu.
Cały ten plik konfiguracyjny jest w pewien sposób zakodowany. Ma zmienione rozszerzenie na .nin (od Ninjago =P) i informacje są zapisane między całą masą różnego tekstu, aby nie dało się odnaleźć, i ręcznie edytować w/w informacji. Każda z tych informacji jest zapisana między np. %numer_aktywnego%, #numer_dostępnego#, $nazwa_weapona$.
I program pobiera kolejno linie tego pliku, i szuka w nim np. %, kiedy znajdzie procent, wtedy wczytuje wszytko co jest umieszczone, aż do następnego procentu, i w ten sposób odnajduje informacje w tym gąszczu tekstu.
Niestety, podczas zmiany aktywnego weapona, trzeba też w tym pliku zmienić numerek. Dlatego program, wczytuje po kolei każdą linię. W każdej linii idzie przez każdy znak i sprawdza, czy jest on procentem, czy nie. Jeśli nie to zapisuje sobie ten znak do zmiennej i idzie dalej, jeśli natomiast trafi na %, czyli trafi na początek informacji o tym który plik ma teraz nazwę weapon, zapisze do zmiennej %, potem numer weapona, który wybraliśmy, i doda %, a potem przepisze calą resztą do zmiennej. Na koniec nadpisze cały plik konfiguracyjny tą zmienną (czyli tym samym tekstem, tylko ze zmienioną jedną liczbą).
I tu pojawia się problem, gdyż program przechodząc przez tą część, w której przepisuje całą zawartość pliku do zmiennej, ze zmienioną wartością, nagle kończy swoją pracę. Prosiłbym o przejrzenie poniższego kodu i o wyłapanie błędów.
char krzaczek = '#'; //wartość jest osadzona właśnie między drabinkami
string select; // - to jest numer wybranego weapona, został wprowadzony we wcześniejszej części programu.
fstream change_activ;
string all_file; //zmienna przechowujaca zawartos pliku config.nin ze zmieniona zadana wartoscia
system("pause"); //program dociera tylko do tego miejsca
change_activ.open("config.nin", ios::in);
if(change_activ.good() == true)
{
for(string line;!change_activ.eof();)
{
getline(change_activ, line); //pobieranie kolejnej linii
for(int i=0;i < line.length();i++) //zapisywanie kazdego znaku do zmiennej
{
if(line[i] == krzaczek) //kiedy napotkamy krzaczka, zamieniamy istniejaca wartosc na nowa
{
all_file += krzaczek; //dodajemy krzaczka
all_file += select; //dodajemy nowa zmienna
all_file += krzaczek; //dodajemy koncowego krzaczka
for(;line[i] != krzaczek; i++); //szukamy konca - drugiego krzaczka
}
else all_file += line[i];
}
}
change_activ.close();
}