Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zapis do Pliku fstream problem.

Ostatnio zmodyfikowano 2013-02-01 20:08
Autor Wiadomość
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 :
C/C++
void dodaj() {
    fstream baza;
    baza.open( "baza_danych.txt", ios::in | ios::out | ios::app );
    if( baza.is_open() ) {
        // przechodzić miało to na koniec pliku lecz zrezygnowałem na korzyść flagi ios:app
        // baza.seekp( liczba_rekordow);
        //if( baza.fail() )cout<<"Error #002";
        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
P-75552
ison
» 2013-02-01 19:20:42
Wyrzuć
ios::in
 skoro i tak nic nie wczytujesz.
P-75556
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.
P-75557
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ź
C/C++
#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.
P-75559
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.
C/C++
#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 ?
P-75560
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?
P-75562
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.
P-75565
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.
P-75566
« 1 »
  Strona 1 z 1