kleine frage zum auslesen einer datei mit ifstream.



  • Tag Leute,
    also iregndwie stehe ich gerade aufm Schlauch, ich habe mit einer Funktion datein in eine Datei geschrieben und zwar so:

    nickname // erste Zeile
    passwort // zweite Zeile
    

    und nun möchte ich mit einer anderen Funktion diese Datei wieder auslesen und nickname und password jeweils in einen char array[ 16 ] speichern. hm aber irgendwie weiß ich gerade icht wie ich das machen soll, wär toll wenn mir mal einer nen Tip oder Lösungsvorschlag mahcen könnte.

    Gruß Tobi.



  • getline sollte dir gute Dienste leisten...

    Gruß
    zeigerzeiger



  • ja schon aber irgendwie komm ich dmait noch net ganz ans Ziel. Hier ist erst mal meine zusammen gebaute funktion:

    void loadLastSavedUserData( HWND hEdit_Nick, HWND hEdit_Pw ) {
    
        ifstream load;
        bool isNickname = true;
        char szBuffer[ 32 ];
        char szNick[ 16 ];
        char szPw[ 16 ];
    
        szBuffer[ 0 ] = 0;
        load.open( "lastuser.dat", ios::in );
        if( !load.good( ) ) {
    
            return;
        }
    
            // ***** read out the full data *****
            load.getline( szBuffer, sizeof( szBuffer ) );
    
        load.close( );
    
        // ***** split the string into nick and pw *****
        szNick[ 0 ] = 0;
        szPw[ 0 ] = 0;
        int j = 0;
        for( int i = 0; i < (int)strlen( szBuffer ); i++ ) {
    
            // ***** get the nickname *****
            if( isNickname ) {
    
                if( szBuffer[ i ] == '/' ) {
    
                    szNick[ i ] = '\0';
                    isNickname = false;
                    continue;
                }
                else {
    
                    szNick[ i ] = szBuffer[ i ];
                }
            }
            // ***** get the password *****
            else if( !isNickname ) {
    
                szPw[ j ] == szBuffer[ i ];
                j++;
            }
        }
    
        // ***** insert \0 to both strings
        strcat( szPw, "\0" );
    
        // ***** finaly set the editbox texts *****
        SendMessage( hEdit_Nick, WM_SETTEXT, 0, (long)szNick );
        SendMessage( hEdit_Pw, WM_SETTEXT, 0, (long)szPw );
    }
    

    den nickname liest sie hervorragend aus doch das passwort wird nicht richtig ausgelesen der string bleibt immer leer. wieso ?

    Gruß Tobi.



  • T0bi schrieb:

    den nickname liest sie hervorragend aus doch das passwort wird nicht richtig ausgelesen der string bleibt immer leer. wieso ?

    Weil, wie man am Namen erkennen kann, getline eine Zeile ausliest. Du wendest getline genau einmal an und schließt die Datei danach.

    Preisfrage: Wieviele Zeilen wurden gelesen? 😃



  • boaahr manno konnte ja mal nur wieder mir passieren ^^
    doofer anfänger fehler :), nicht == sondern = *g*

    Trotzdem dnake.

    PS: hatte das schon so geändert das is alles in einer zeile hab.



  • void load_userdata(HWND hEdit_Nick, HWND hEdit_Pw) 
    {
    	std::ifstream file_stream("userdata.dat", std::ios::in);
    	if (!file_stream)
    		return;
    
    	std::string tmp;
    	std::getline(file_stream, tmp);
    	::SendMessage(hEdit_Nick, WM_SETTEXT, 0, reinterpret_cast<LRESULT>(tmp.c_str()));
    	std::getline(file_stream, tmp);
    	::SendMessage(hEdit_Pw, WM_SETTEXT, 0, reinterpret_cast<LRESULT>(tmp.c_str()));
    }
    
    void save_userdata(HWND hEdit_Nick, HWND hEdit_Pw)
    {
    	std::ofstream file_stream("userdata.dat", std::ios::in);
    	if (!file_stream)
    		return;
    
    	std::size_t len = ::SendMessage(hEdit_Nick, WM_GETTEXTLEN, 0, 0) + 1;
    	char* arr = new char[len];
    	::SendMessage(hEdit_Nick, WM_GETTEXT, len, reinterpret_cast<LRESULT>(arr));
    	file_stream << arr << std::endl;
    	delete [] arr;
    
    	len = ::SendMessage(hEdit_Pw, WM_GETTEXTLEN, 0, 0) + 1;
    	arr = new char[len];
    	::SendMessage(hEdit_Pw, WM_GETTEXT, len, reinterpret_cast<LRESULT>(arr));
    	file_stream << arr << std::endl;
    	delete [] arr;
    }
    

    allerdings solltest du schon sehen das du das PW verschlüsselst 😉



  • T0bi schrieb:

    ...
        char szBuffer[ 32 ];
        char szNick[ 16 ];
        char szPw[ 16 ];
    ...
    

    Warum nur ? Warum ? 😮 😞 😮 😡

    => std::string macht das alles besser für Dich.

    Gruß,

    Simon2.


Anmelden zum Antworten