Hipochondryk Temat założony przez niniejszego użytkownika |
Zapis do Pliku fstream problem. » 2013-02-01 19:03:47 Witam piszę i kompiluję pod Dev-C++ 5.2.0.2. Uzywam biblioteki fstream. mam taki o to kod : void dodaj() { fstream baza; baza.open( "baza_danych.txt", ios::in | ios::out | ios::app ); if( baza.is_open() ) { cout << liczba_rekordow; string dodaj, temp; cout << "Podaj prosze nazwe produktu : "; getline( cin, temp ); dodaj += temp; dodaj += '|'; cout << "Podaj Producenta : "; getline( cin, temp ); dodaj += temp; dodaj += '|'; cout << "Podaj kategorie produktu : "; getline( cin, temp ); dodaj += temp; dodaj += '|'; cout << "Wpisz opis : "; getline( cin, temp ); dodaj += temp; dodaj += '|'; cout << "Ile sztuk ?"; getline( cin, temp ); dodaj += temp; dodaj += '|'; cout << "cena netto: "; getline( cin, temp ); dodaj += temp; dodaj += '|'; liczba_rekordow++; baza << liczba_rekordow << "|" << dodaj; cout << "Zapisano!"; } else cout << "Error #001" << endl; baza.close(); }
jest to funkcja z większego kodu zapisująca do bazy danych dodatkowy rekord w postaci jednej lini(stringu) po wykonaniu się tego programu nie zapisuje nic do pliku, ani nie rzuca żadnego błędu, plik jest stworzony i NIE jest ukryty ani tylko do odczytu, czy ktoś widzi jakiś problem ? ktoś z was pomoże zrozumieć dlaczego nic nie zapisuje się do pliczku ? Wielokrotnie zapisywałem, do plików itp, lecz nigdy nie spotkałem się z czymś takim. Pewnie gdzieś jest jakaś literówka lub błąd logiczny/składniowy którego przez zmęczenie nie widzę. Proszę was o pomoc ponieważ sam spędziłem ponad 4h na przeszukiwaniu googli i kodu w poszukiwaniu jakiejś nieścisłośći w algorytmie i nic. Pozdrawiam i dziękuje z góry. Artur Lisowski |
|
ison |
» 2013-02-01 19:20:42 Wyrzuć ios::in skoro i tak nic nie wczytujesz. |
|
Hipochondryk Temat założony przez niniejszego użytkownika |
» 2013-02-01 19:22:57 wczytuję lecz to jest nieistotne i działa bez problemu, dlatego przy kodzie tego nie ma. Po usunięciu flagi input również występuje ten problem. |
|
ison |
» 2013-02-01 19:29:57 Skoro wczytujesz to znaczy, że kod który wkleiłeś nie jest faktycznym kodem. Plik się otwiera poprawnie? U mnie działa bez problemu. Sprawdź #include <fstream> #include <cstdio> #include <iostream>
using namespace std;
void dodaj() { fstream baza; baza.open( "baza_danych.txt", ios::out | ios::app ); if( baza.is_open() ) { int liczba_rekordow = 0; cout << liczba_rekordow; string dodaj, temp; cout << "Podaj prosze nazwe produktu : "; getline( cin, temp ); dodaj += temp; dodaj += '|'; cout << "Podaj Producenta : "; getline( cin, temp ); dodaj += temp; dodaj += '|'; cout << "Podaj kategorie produktu : "; getline( cin, temp ); dodaj += temp; dodaj += '|'; cout << "Wpisz opis : "; getline( cin, temp ); dodaj += temp; dodaj += '|'; cout << "Ile sztuk ?"; getline( cin, temp ); dodaj += temp; dodaj += '|'; cout << "cena netto: "; getline( cin, temp ); dodaj += temp; dodaj += '|'; liczba_rekordow++; baza << liczba_rekordow << "|" << dodaj; cout << "Zapisano!"; } else cout << "Error #001" << endl; baza.close(); }
int main() { dodaj(); }
Jeśli nadal nie działa to pewnie Windows postanawia utworzyć/zmienić plik w swoim katalogu tymczasowym. Dzieje się tak niekiedy na dysku gdzie jest zainstalowany system. |
|
Hipochondryk Temat założony przez niniejszego użytkownika |
» 2013-02-01 19:36:01 owszem działającą część kodu nie wrzuciłem, wrzuciłem tylko to co nie działa i nie opiera się na poprzedniej części. Wrzucony kod powinien działać samodzielnie. oto pliki nagłówkowe,przestrzenie nazw i makrodefinicje zamieszczone w programie. #include <iostream> #include <lisowski.hpp> #include <fstream> #include <string> #include <conio2.h> #include <cstdio> #define KR cout<<"|"; #define TG textcolor (LIGHTGREEN);
using namespace std;
Czy może to być spowodowane czymś związane ? Nie chcę wrzucać całego kodu , ponieważ czesto podobne zadania są na zaliczenia na uczelniach, więc nie chce umieszczać komuś gotowca. mimowszystko iż uzyskuje dostęp do pliku nie zapisuje. Odczytuje w innych funkcjach bez problemu lecz z zapisem nie idze. Piszę pod Windows 7 home premium, Czy istnieje funkcja zmuszająca kompilator by tak skompilował by windows nie brał do swoich tymczasowych tylko to tego określonego pliku ? |
|
Hipochondryk Temat założony przez niniejszego użytkownika |
» 2013-02-01 19:42:14 Skopiowałem Twój kod i działa, czy mógłbyś powiedzieć co zmieniłeś w kodzie? bo niezbyt widzę, pewnie ze zmęczenia. zmienna liczba rekordów jest zmienną wczytywaną z pliku, i jest globalna, czy to mogło stanowić problem? |
|
ison |
» 2013-02-01 20:04:03 Nie, to, że jest to zmienna globalna nic nie zmienia. W kodzie nic nie zmieniłem poza wyrzuceniem ios::in. |
|
Hipochondryk Temat założony przez niniejszego użytkownika |
» 2013-02-01 20:08:29 no właśnie to jest dziwne bo też to tylko widziałem , kopiuje mój kod bez ios::in, i nie działa Twój działa, eh... coś mi widocznie sprzęt nawala, trzeba zmienić kompilator, lub zreinstalować. Dzięki wielkie za pomoc. Temat do zamknięcia. |
|
« 1 » |