Operacje z plikami dyskowymi - problemy

MAm problem z operacjami zapisu odczytu i zamkniecia pliku

#include 

#include 

#include 

using namespace std;

int main()

{

    string zapis;

    cin >> zapis;

 fstream plik_zapis;


    plik_zapis.open("C:\Dev-Cpp1\zoom.txt.txt", ios::out | ios::binary);


    plik_zapis.close ();


     cin.ignore();

              cin.get();

    return 0;

              system("pause");

    }

takie:

11:22 C:\Dev-Cpp1\fileopen.cpp [Warning] unknown escape sequence ‘\D’

11:22 C:\Dev-Cpp1\fileopen.cpp [Warning] unknown escape sequence ‘\z’

12 C:\Dev-Cpp1\fileopen.cpp no matching function for call to `std::basic_fstream >::write(std::string&)’

note C:\Dev-Cpp\include\c++\3.4.2\bits\ostream.tcc:360 candidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::write(const _CharT*, std::streamsize) [with _CharT = char, _Traits = std::char_traits]

Moglby mi ktos poprawic moj kod tak, zeby wszystko bylo poprawnie? Z gory dzieki

Złączono Posta : 28.03.2007 (Sro) 20:42

Dobra juz dziala, mam teraz inne pytanie. Bo jak zapisuje cos do pliku, i potem zapisuje jeszcze raz to poprzedni wpis sie kasuje. Jak zrobic, zeby tamten wpis sie nie kasowal ale byl linijke pod poprzednim?

Nie potrafisz czytać?

unknown escape sequence ‘\D’

unknown escape sequence ‘\z’

Chyba wiesz co to jest np: ‘\n’ ? Znak przejścia do nowej linii. backslash służy do wpisywania specjalnych znaków, żeby wpisać go jako literę należy użyć konstrukcji: ‘\’ , tak samo wpisuje się apostrof, cudzysłów, NULL, znak zapytania. Tak więc poprawa na: “C:\Dev-Cpp1\zoom.txt.txt”.

Sqlazack może jednak kupisz sobie jakąś dobrą książkę do nauki C++? Bo to są naprawdę podstawy. Jeżeli żal ci kasy, to chociaż poczytaj to: http://it.hk.pl/

Mam książkę. Ale skąd mam wiedzieć co to jest

unknown escape sequence ‘\z’

skoro nie ma tak zadnego sequence \z

Złączono Posta : 28.03.2007 (Sro) 20:58

Dobra juz dziala, mam teraz inne pytanie. Bo jak zapisuje cos do pliku, i potem zapisuje jeszcze raz to poprzedni wpis sie kasuje. Jak zrobic, zeby tamten wpis sie nie kasowal ale byl linijke pod poprzednim?

Połączone tryby ios::out oraz ios::app

ios::out | ios::app

To powiedz jaką książkę masz? ;0 A przeczytałeś ją choć raz?]

edit: pomyłka, oczywiście out , dla in plik musi wcześniej istnieć i służy do czytania…

możesz też użyć kombinację ios::out | ios::ate

Napisałeś na poczatku ios::out i ios::app a potem ios::in i ios::app Prosze o przyklad na kodzie

//...........

 plik_zapis.open("C:\\Dev-Cpp1\\zoom.txt.txt", ios::out | ios::binary);

    plik_zapis.write(zapis.c_str(), zapis.size());


    plik_zapis.close ();
plik_zapis.open("C:\\Dev-Cpp1\\zoom.txt.txt", ios::out | ios::app | ios::binary);

No i teraz jak masz string to możesz tak jak ty to zrobiłeś, nie wiem czy czasem nie da się w prostszy sposób:

plik_zapis << zapis; // Nie jestem pewien czy da się tak również ze stringami

Chyba się da :wink:

Żeby zrozumieć jakiś tekst należy… przeczytać go ze zrozumieniem. Problem pojawił się w linii z ciągiem znaków i dotyczył ciągu \z - wystarczyło zerknąć do ksiażki, poradnika albo FAQ i przeczytać kilka stron o konstruowaniu ciągu znakowego.

Nie da się bo plik jest do odczytu.

::out - odczyt

::in - zapis

::app - na końcu pliku (dla zapisu)

::binary - w trybie binarnym

Jeśli to plik tekstowy to nie ma sensu otwierać go w trybie binarnym. Jeśli chcesz zapisywać - otwórz z in (jeśli dopisywać z in i z app). Jeśli chcesz czytać - z out. Jeśli zapis i odczyt - poczytaj trochę.

OK< teraz dopisuje. le jest problm, ze to wszystko nie jest oddzielone, znaczy sie jest jedno zaraz obok drugiego, np: to trzech wpisach, ala, kot, vacek pojawia sie w pliku zoom.txt alakotvacek. Jak zrobic, zeby kazdy kolejny wpis byl od nowej linii?

Dodaj “sztucznie” enter po zapisaniu każdej rzeczy. Przejście do nowej linii w Windows to \r\n.

Jak to zrobic? Gdzie wpisac?

string zapis;

    cout << "Type what would you like to save\t";

    cin >> zapis;

 fstream plik_zapis;


    plik_zapis.open("C:\\Dev-Cpp1\\zoom.txt.txt", ios::out | ios::app | ios::binary);

    plik_zapis.write(zapis.c_str(), zapis.size());


    plik_zapis.close ();

Złączono Posta : 29.03.2007 (Czw) 16:52

i drugie pytanie. Jaki jest kod na odczytanie i wyświetlenie na ekran zawartości pliku zoom.txt ? Prosze o pomoc

plik_zapis.write("\n", zapis.size());

przed

plik_zapis.close ();

Odczytujesz przy pomocy .read. Musisz otworzyć (open) plik z odpowiednimi atrybutami (opisałem wcześniej) i odczytać (.read) dane z niego do stringa a następnie wypluć string na ekran przy pomocy cout.

Druga darmowa porada dla Ciebie: skoro masz książkę - przeczytaj ją! Najlepiej ze zrozumieniem.