Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [cpp] znowu problem z plikami :(
loo
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 26.07.2003
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Poniżej przedstawiam kod dwoch funkcji:
Kod
/* dodaje kategorie (bez zadnych danych) */

void CObsluga::ProcessAddCategories (void)

{

   fstream TworzonyPlik;

   char Rozszerzenie [] = {".kat"};



   /* czysci ekran */

   Clear ();



   /* otwarcie pliku w ktorym przechowywane sa nazwy kategorii */

   NazwyKategorii.open ("name.db", ios::out | ios::app);

   if (NazwyKategorii.is_open ())

   {

      /* udalo sie otworzyc pliku */

      std::cout << "Podaj nazwe kategorii: ";

      std::cin >> Nazwa;

      NazwyKategorii << Nazwa << " ";

      TworzonyPlik.open (strcat (Nazwa, Rozszerzenie), ios::out);

   }

   else

   {

      /* nie udalo sie otworzyc pliku */

      std::cout << "Niestety nie udalo sie utworzyc nowej kategorii." << std::endl;

      std::cout << "Pozamykaj wszystkie programy i sproboj ponownie. :D" << std::endl;

   }



   NazwyKategorii.close ();

   TworzonyPlik.close ();

}

A tutaj drugi kod:
Kod
/* wyswietla dostepne kategorie */

void CObsluga::ShowAllCategories (void)

{

   short Tymczasowa;

   NazwyKategorii.open ("name.db", ios::in);

   if (NazwyKategorii.is_open ())

   {

      /* udalo sie otworzyc plik */

   NazwyKategorii >> Nazwa;

   std::cout << "Wyswietla wszystkie kategorie";

   NazwyKategorii.close ();

   std::cin >> Tymczasowa;

   }

   else

   {

      /* nie udalo sie otworzyc pliku */

      std::cout << "Niestety nie udalo sie utworzyc nowej kategorii." << std::endl;

      std::cout << "Pozamykaj wszystkie programy i sproboj ponownie." << std::endl;

   }

}

I tak. Problem polega na tym ze kiedy zapisuje dane do pliku data.db to wszystko jest ok, ale jak potem chce je odczytac przy uzyciu drugiej funkcji to nie odczytuje. Jak to zrobic? Nie wiem czy dobrze mysle ale chyba trzeba coś ze wskaźnikami pokombinować. Moze ktos wie jak? Byłbym wdzięczny smile.gif I tak jeszcze na marginesie czy jest funkcja w c++, ktora usuwa wskazany wczesniej plik??
Go to the top of the page
+Quote Post
adwol
post
Post #2





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

Ostrzeżenie: (0%)
-----


Ten kod jest chyba niekompletny, brakuje m.in. deklaracji zmiennej Nazwa. Poza tym sprecyzuj, co to znaczy, że nie odczytuje. Program sie sypie, albo wisi w nieskończoność, zmienna ma dziwną wartość, itp.

Widzę tu też pułapkę z strcat (czy napewno masz odpowiednio dużo miejsca na doklejenie do nazwy rozszerzenia) i ze zmienną Tymczasowa (przed odczytem kategorii pobierasz od użytkownika jakąś liczbę).

Napisz czym się dokładnie objawia problem, bo poprawiając to co napisałem powyżej kod działa raczej prawidłowo.
Go to the top of the page
+Quote Post
loo
post
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 26.07.2003
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Nazwa zadeklarowana jest w klasie CObsluga.
Hmmm nie odczytuje. Chodzi mi oto, że jak dodaje jakaś kategorie np. EBooks, to tworzony jest plik o tej nazwie z rozszerzeniem .kat, a w pliku name.db zapisywana jest nazwa kategorii, czyli w tym wypadku EBooks, natomiast jak chce po ponownym uruchomieniu programu odczytac te 'EBooks' czyli wyswietlic zawartosc pliku name.db to nic mi sie nie wyswietla.
zmienna Tymczasowa jest po to zeby program mi sie nie wylaczyl i zebym zobaczyl czy udalo sie odczytac dane tak wiec ona raczej nie ma tutaj wiekszego znaczenia.
Go to the top of the page
+Quote Post
FiDO
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


Cytat
[...] te 'EBooks' czyli wyswietlic zawartosc pliku name.db to nic mi sie nie wyswietla.

A masz gdzies kod wyswietlajacy zawartosc tego pliku? Bo ja tu takiego nie widze..


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
loo
post
Post #5





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 26.07.2003
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


No własnie to jak ten kod ma wygladac ?
Go to the top of the page
+Quote Post
FiDO
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


np. tak
Kod
/* udalo sie otworzyc plik */

cout << "Wyswietla wszystkie kategorie:n";

while (NazwyKategorii.good())

{

   NazwyKategorii.getline(Nazwa, sizeof(Nazwa), ' ');

   cout << Nazwa << endl;

}

NazwyKategorii.close ();


zmienna Nazwa musi byc tablica znakow (np. char Nazwa[50]; )


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
loo
post
Post #7





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 26.07.2003
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Dzięki smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 08:42