VC++, Inhalt einer Textdatei in Eingabefeld anzeigen

bendorphin

Grünschnabel
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
 
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:
C++:
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. [code=cpp]...[/code]. Bitte beim nächsten Mal daran denken.

Gruß
MCoder
 
Zurück