Rudy Temat założony przez niniejszego użytkownika |
[Kursy XVI i XVII]Kilka pytań - Nadpisywanie pliku tekstowego... » 2009-08-04 15:00:25 Witam ponownie. Mam taki kod: #include <iostream> #include <fstream> #include <conio.h> #include <string> #include "mine\adv_data.cpp"
using namespace std; using namespace adv_data;
int main() { unsigned char litera; string tekst; fstream plik; plik.open( "Test.txt", ios::in | ios::out ); if( plik.good() ) { while( !plik.eof() ) { getline( plik, tekst ); cout << tekst << endl; } litera = getch(); while( litera != 27 ) { cout << litera; plik << litera; litera = getch(); } plik.close(); cout << endl << endl << "-== Zapisano ==-" << endl; } else { cout << "Nie wczytano pliku!"; cout << "Kliknij dowolny przycisk, aby zako" << ALT_N << "czy" << ALT_C << "..."; } getch(); return( 0 ); } Plik Test.txt istnieje i znajduje się tam, gdzie plik źródłowy. Odczytywanie pliku przebiega zgodnie z planem, błąd pojawia się dopiero przy tej linii: plik << litera; Pytanie: dlaczego program nie wpisuje litery, która znajduje się w zmiennej? Linijka przed tą działa poprawnie. |
|
malan |
» 2009-08-04 15:13:15 plik.open( "Test.txt", ios::in | ios::out );
Spróbuj najpierw otworzyć plik do odczytu, a potem do zapisu. Czyli: -otwórz plik do odczytu; -odczytaj dane; -zamknij plik; -otwórz plik do zapisu; -zapisz dane; -zamknij plik; |
|
Rudy Temat założony przez niniejszego użytkownika |
» 2009-08-04 15:16:16 Po zamknięciu programu i otwarciu pliku testowego był on czysty (wcześniej coś w nim było zapisane, ale za pomocą notatnika). |
|
malan |
» 2009-08-04 15:19:00 Tak powinno być :). Jeśli chcesz dopisywać dane musisz otworzyć plik do zapisu + zapisywać na końcu pliku (ios::app). |
|
Rudy Temat założony przez niniejszego użytkownika |
» 2009-08-04 15:29:18 Zmieniłem, sytuacja ta sama co na początku. Program odczytuje to, co jest w pliku, ale nie potrafi dopisać nowych danych. Sprawdzałem z ios::app, oraz z ios::out|ios::app Dla pewności pokażę, jak teraz wygląda kod: ... plik.open( "Test.txt", ios::in ); if( plik.good() ) { while( !plik.eof() ) { getline( plik, tekst ); cout << tekst << endl; } plik.close(); plik.open( "Test.txt", ios::out | ios::app ); litera = getch(); while( litera != 27 ) { cout << litera; plik << litera; litera = getch(); } plik.close(); cout << endl << endl << "-== Zapisano ==-" << endl; } ... |
|
malan |
» 2009-08-04 15:32:53 Zamień: plik.close(); plik.open( "Test.txt", ios::out | ios::app );
...na: plik.close(); plik.clear(); plik.open( "Test.txt", ios::out | ios::app );
|
|
Rudy Temat założony przez niniejszego użytkownika |
» 2009-08-04 15:38:28 Działa :)
Jest jeszcze jeden problem. Otóż, jeżeli wcisnę enter, na konsoli kursor przeskakuje na początek obecnego wiersza, a w pliku nic się nie dzieje. 1. Jak zrobić, by klikając enter robiło się to co powinno (czyli skok do nowej liniki)? 2. Czy może być więcej tego typu przycisków, jak na przykład Backspace, Delete? |
|
malan |
» 2009-08-04 15:47:11 1. Tworzysz warunek, w którym sprawdzasz wartość litera. 1.2. Jeśli wartość = 13 (13- kod klawisza ENTER) to litera = '\\n' (gdzie '\\n' oznacza znak nowej lini). Coś takiego: if( litera == 13 ) litera = '\n';
2. Tak. Tabela kodów ASCII. |
|
« 1 » 2 3 |