emu23 Temat założony przez niniejszego użytkownika |
Problem z dostępem do plików » 2009-08-01 10:08:13 Witam, właśnie piszę programik w którym chciałem wykorzystać dane z osobnego pliku, oczywiście wzoruje się na http://kursy.ddt.pl/?LessonId=110 . Właściwie program już jest skończony, ale ciągle mam problem, przy uruchomieniu programu występuje błąd Naruszenie ochrony pamięci, czy mógłby mi ktoś powiedzieć gdzie jest błąd? int main() { std::fstream wejscie; std::fstream wyjscie; wejscie.open( "wejscie", ios::in | ios::out ); if( wejscie.good() == true ) { cout << "Znaleziono plik wejscia"; cout << endl; getline( wejscie, tekst ); wyjscie.open( "wyjscie", ios::in | ios::out ); if( wyjscie.good() == true ) { for( int i = 0; i < tekst.size(); i++ ) { string znaczek = znaczek + tekst[ i ]; cout << "ZNACZEK " << znaczek << endl; cout << "Zamieniony ZNACZEK " << zamiana( znaczek ) << endl; wyjscie << zamiana( znaczek ); } } wejscie.close(); wyjscie.close(); } else cout << "brak dostepu do pliku"; cout << tekst << endl; return 0; } // Patzick: wklejaj kod na forum, przyspiesza to rozwiązywanie problemów :) |
|
eBbi |
» 2009-08-01 11:07:26 Jak to mówi Dr. HOUSE - "Wszyscy kłamią" :D |
|
emu23 Temat założony przez niniejszego użytkownika |
» 2009-08-01 11:32:13 Eeee może dlatego że to nie jest cały kod? ;p
Nie zdziwił Cie na przykład brak deklaracji bibliotek? ;] |
|
malan |
» 2009-08-01 11:42:25 Jakiego typu jest funkcja zamiana() ? |
|
emu23 Temat założony przez niniejszego użytkownika |
» 2009-08-01 13:10:46 Funkcja string, wczytuje chara, potem zależnie od wartości chara nadaje wartość innej zmiennej (string) którą potem zwraca. A i troszkę zmieniłem kod int main() { std::fstream wejscie; std::fstream wyjscie; wejscie.open( "wejscie", ios::in | ios::out ); if( wejscie.good() == true ) { cout << "Znaleziono plik wejscia"; cout << endl; getline( wejscie, tekst ); wyjscie.open( "wyjscie", ios::in | ios::out ); if( wyjscie.good() == true ) { for( int i = 0; i < tekst.size(); i++ ) { string znaczek = znaczek + tekst[ i ]; cout << "ZNACZEK " << znaczek << endl; cout << "Zamieniony ZNACZEK " << zamiana( znaczek[ 0 ] ) << endl; wyjscie << zamiana( znaczek[ 0 ] ); } } wejscie.close(); wyjscie.close(); } else cout << "brak dostepu do pliku"; cout << tekst << endl; return 0; } // Patzick: wklejaj kod na forum... |
|
malan |
» 2009-08-01 20:10:01 No więc tak: 1. Nie otwieraj pliku do odczytu i zapisu równocześnie. Otwórz jeden do odczytu, a potem 2 do zapisu. Domyślam się, że plik wejscie otwierasz do odczytu więc go otwórz (sprawdź, czy otwarto poprawnie), pobierz dane (dla sprawdzenia możesz jeszcze wyświetlić tą zawartość) i od razu zamknij. Następnie otwórz plik wyjście (sprawdź poprawność operacji), zapisz do niego dane i go zamknij. 2. wejscie.open( "wejscie", ios::in | ios::out ); Plik bez rozszerzenia ? ;> 3. for( int i = 0; i < tekst.size(); i++ ) { string znaczek = znaczek + tekst[ i ]; wyjscie << zamiana( znaczek[ 0 ] ); } Zadeklaruj sobie gdzieś wcześniej zmienną znaczek i zapisuj ją do pliku za pomoća write(). Pomijam już to, że zapisze się się 1 znak... Mniej więcej to powinno wyglądać tak: string znaczek;
for( int i = 0; i < tekst.size(); i++ ) { znaczek += tekst[ i ]; wyjscie.write( & znaczek[ 0 ], znaczek.size() ); } |
|
emu23 Temat założony przez niniejszego użytkownika |
» 2009-08-01 22:58:25 Ok dzięki, wszystko działa ! ! ! ;p int main() { std::fstream wejscie; std::fstream wyjscie; string znaczek; wejscie.open( "wejscie", ios::in | ios::out ); if( wejscie.good() == true ) { cout << "Znaleziono plik wejscia"; cout << endl; getline( wejscie, tekst ); wejscie.close(); wyjscie.open( "wyjscie", ios::in | ios::out ); if( wyjscie.good() == true ) { for( int i = 0; i < tekst.size(); i++ ) { znaczek = znaczek + tekst[ i ]; wyjscie << zamiana( znaczek[ i ] ); } } wyjscie.close(); } else cout << "brak dostepu do pliku"; cout << tekst << endl; return 0; }
|
|
manfred |
» 2009-08-01 11:01:10 Kłamstwo nigdy nie jest dobre - to się nawet nie kompiluje, więc gdzie ma lecieć SIGSEGV? |
|
« 1 » |