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

Problem z dostępem do plików

Ostatnio zmodyfikowano 2009-08-01 11:01
Autor Wiadomość
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?

C/C++
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;
                /* funkcja zamiana zmienia znak w ciąg innych */
                cout << "Zamieniony ZNACZEK " << zamiana( znaczek ) << endl;
               
                /* tutaj zamiana() działa bez problemu wiec  to nie jej wina */
               
                /*gdzieś po tej linijce pojawia się błąd*/
                wyjscie << zamiana( znaczek ); //pewnie tu ;p
            }
        }
        wejscie.close();
        wyjscie.close();
    }
    else cout << "brak dostepu do pliku";
   
    cout << tekst << endl; // ten tekst już się nie pojawia
    return 0;
}

//Patzick: wklejaj kod na forum, przyspiesza to rozwiązywanie problemów :)
P-8925
eBbi
» 2009-08-01 11:07:26
Jak to mówi Dr. HOUSE - "Wszyscy kłamią" :D
P-8926
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? ;]
P-8928
malan
» 2009-08-01 11:42:25
Jakiego typu jest funkcja zamiana() ?
P-8929
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

C/C++
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...
P-8933
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.
C/C++
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:
C/C++
string znaczek;
//...
for( int i = 0; i < tekst.size(); i++ )
{
    znaczek += tekst[ i ];
    //...
    wyjscie.write( & znaczek[ 0 ], znaczek.size() );
}
P-8942
emu23
Temat założony przez niniejszego użytkownika
» 2009-08-01 22:58:25
Ok dzięki, wszystko działa ! ! ! ;p

C/C++
int main()
{
    std::fstream wejscie;
    std::fstream wyjscie;
    string znaczek;
    wejscie.open( "wejscie", ios::in | ios::out );
    /*siedzę na linuxie więc bez rozszerzenia może być ;] ...chociaż w sumie i tak wypadałoby zamienić na .txt ;p */
    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 ] ); //jakoś wolałem tak ;p
            }
        }
       
        wyjscie.close();
    }
    else cout << "brak dostepu do pliku";
   
    cout << tekst << endl;
    return 0;
}
P-8960
manfred
» 2009-08-01 11:01:10
Kłamstwo nigdy nie jest dobre - to się nawet nie kompiluje, więc gdzie ma lecieć SIGSEGV?
P-19111
« 1 »
  Strona 1 z 1