tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
317
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    bendorphin bendorphin ist offline Rookie
    Registriert seit
    Sep 2007
    Beiträge
    6
    Hallo,
    möchte den Inhalt einer Textdatei in ein Eingabefeld angezeigt bekommen.
    Die Datei soll über ein Menu"Datei öffnen" aufgerufen werden.
    Klappt soweit, jedoch werden am Ende immer ein paar wirre Zeichen mit angehängt.
    Naja, hier mal der Quellcode:

    void CTextverarbeitungDlg::OnDateiOpen()
    {
    // TODO: Fügen Sie hier Ihren Befehlsbehandlungscode ein.
    UpdateData(TRUE);

    CFileDialog ldFile(TRUE);

    CString m_strFileName;
    CString strString;
    CString strFileIn;
    char str[50];


    // Standarddialogfeld öffnen
    if (ldFile.DoModal() == IDOK)
    {
    m_strFileName = ldFile.GetPathName(); // Dateipfad holen
    }

    strFileIn = m_strFileName;

    // Datei öffnen
    CFile filein(strFileIn, CFile::modeRead );

    // Datei lesen
    while (filein.Read(str,sizeof(str)))
    {

    m_strLesen = str;
    UpdateData(FALSE) ; // Dialogfeld aktualisieren
    };
    filein.Close();
    }
    ...und hier die Ausgabe:

    Erste Zeile.
    Zweite Zeile.
    ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌp™5

    Warum diese dritte Zeile?
    Problem durch zuweisung von m_strLesen = str ?

    Kann mir jemand helfen?
    WinXP
    Visual Studio
    MFC-Anwendung mit Assistenten
     

  2. #2
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Hallo,

    du musst das Textende mit Null kennzeichen, sonst wird womöglich der ganze Buffer (50 Zeichen) verwendet, obwohl der eingelesen Text vielleicht kürzer ist. Daher kommen die kryptischen Zeichen bei der Ausgabe. Da die Datei auch länger als 50 Zeichen sein könnte, solltest du das eingelesene Stück an deine Ausgabevariable anhängen und "UpdateData()" nach der Schleife ausführen:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    UINT nRead;
     
    while( (nRead = filein.Read(str,sizeof(str))) )
    {
        str[nRead] = '\0'; // Nullzeichen für Textende
        m_strLesen += str;
    };
     
    UpdateData(FALSE) ; // Dialogfeld aktualisieren

    Der Quellcode wird übrigens deutlich lesbarer, wenn du ihn innerhalb von Codetags einfügst: [c]...[/c] bzw. [cpp]...[/cpp]. Bitte beim nächsten Mal daran denken.

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  3. #3
    bendorphin bendorphin ist offline Rookie
    Registriert seit
    Sep 2007
    Beiträge
    6
    Hallo,
    vielen Dank für die schnelle Antwort, klappt jetzt super.
    Gruß
    Ben.
     

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 20.09.07, 21:19
  2. Inhalt einer Textdatei sortieren
    Von d4kine im Forum .NET Datenverwaltung
    Antworten: 3
    Letzter Beitrag: 07.01.07, 23:49
  3. Inhalt einer Textdatei in Textfeld anzeigen (vorläufiger Titel)
    Von green_phanta im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 22.11.06, 17:02
  4. Mit Inhalt einer Textdatei Rechnen ?
    Von Corefice im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 22.01.05, 22:09
  5. Inhalt einer Textdatei löschen?
    Von michischmuki im Forum PHP
    Antworten: 3
    Letzter Beitrag: 30.04.04, 01:47