Sonderzeichen in der EditBox nach lesen einer Datei

PuMi2006

Grünschnabel
Ich habe folgendes Problem:

Nachdem ich eine Datei geöffnet habe im Programm in einer EditBox, zeigt diese mir folgendes an:
Willkommen in den Nutzungsbedingungen!

Hier finden Sie informationen!ÌÌÌÌÌÌÌÌÌÌÌ.........

Und diese Sonderzeichen stehen nicht in der Textdatei. Ich habe schon überall gesucht aber noch keine richtige Antwort gefunden. Über Hilfe bin ich Dankbar.

Hier der Quelltext beim Laden der Datei:
Code:
void CLESEN::OnShowWindow(BOOL bShow, UINT nStatus)
{
	CDialog::OnShowWindow(bShow, nStatus);

	UINT nActual = 0; 
	char str[1000];
	CFile datei( L"D:/Testdatei.txt", CFile::modeRead);
	str[nActual] = 0;
	datei.Read( str, sizeof( str ) );
	datei.Close();
	m_strEdit = str; 
	UpdateData(false);
}

Wichtig: Ich benutze Visual Studio 2005.

MfG, ;) PuMi
 
Du hast keinen Null-Terminator eingesetzt.

CFile::Read gibt dir die Anzahl der gelesenen Bytes zurück. Pack den Wert in eine Variable und benutze ihn zum Setzen des Null-Terminators:

Code:
CFile datei( L"D:/Testdatei.txt", CFile::modeRead);

str[nActual] = 0;

UINT dwBytesRead = datei.Read( str, sizeof( str ) );
datei.Close();

str[dwBytesRead] = 0;

Anmerkung: Wenn die Datei genau 1000 Zeichen lang ist, schreibt der Null-Terminator drüber raus. Also am besten bei CFile::Read die Grösse des Puffers minus eins übergeben, dann ist da auf jeden Fall noch Platz.
 
Ich habe unter dem Link http://www.coding-help.de gesucht und habe dort auch vor deinem Beitrag schon eine Lösung gefunden. Dann habe ich noch eine Prüfung zu der Funktion gefunden - die Seite hat mich übrigens deutlich weiter gebracht :D !

Aber hier der Code, den ich jetzt habe:

Code:
    CStdioFile DateiLaden;
    CString strDateiName, strTemp;

    m_strEdit="";

    // Kompletten Pfad der Anwendung ermitteln
    strDateiName = GetCommandLine();

    // Dateierweiterung abschneiden
    int nPos = strDateiName.ReverseFind( '//');
    strDateiName = strDateiName.Mid(1, nPos-1);

    strDateiName += "D://Testdatei.txt";

    int Result;
    if(DateiLaden.Open(strDateiName, CFile::modeRead))
    {
      while(DateiLaden.ReadString(strTemp))
      {
        // Datei zeilenweise auslesen
        m_strEdit = m_strEdit + strTemp + L"\r\n";
      }
      DateiLaden.Close ();
      UpdateData(false);
    }
	else
	{
		Result = MessageBox(L"Datei Testdatei.txt wurde nicht gefunden. Wiederholen?", L"", MB_YESNO | MB_ICONSTOP);
		switch(Result)
		{
		case IDYES:
			{
				if(DateiLaden.Open(strDateiName, CFile::modeRead))
				{
					while(DateiLaden.ReadString(strTemp))
					{
						m_strEdit = m_strEdit + strTemp + L"\r\n";
					}
					DateiLaden.Close ();
					UpdateData(false);
				}
				else
				{
					MessageBox(L"Trotzdem Fehlgeschlagen. Breche suchen ab.", L"", MB_OK | MB_ICONSTOP);
					m_strEdit = L"Datei wurde nicht gefunden!";
					UpdateData(false);
				}
			} break;
		}
    }
Leider dachte ich nicht daran, zu schreiben, das ich eine Lösung gefunden habe.

MfG, PuMi
 
Zurück