tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
562
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    PuMi2006 PuMi2006 ist offline Rookie
    Registriert seit
    May 2006
    Ort
    Berlin
    Beiträge
    9
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    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
     

  2. #2
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    
    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.
     

  3. #3
    PuMi2006 PuMi2006 ist offline Rookie
    Registriert seit
    May 2006
    Ort
    Berlin
    Beiträge
    9
    Ich habe unter dem Link 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 !

    Aber hier der Code, den ich jetzt habe:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    
        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
     

Ähnliche Themen

  1. Größe einer Datei lesen
    Von Affenpisse im Forum Sonstige Sprachen
    Antworten: 14
    Letzter Beitrag: 04.12.09, 15:43
  2. double aus editbox lesen/schreiben
    Von ElCidtheKnight im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 03.11.07, 21:40
  3. lesen und schreiben einer XML Datei
    Von Reverent im Forum .NET Datenverwaltung
    Antworten: 1
    Letzter Beitrag: 14.05.07, 17:06
  4. Antworten: 1
    Letzter Beitrag: 24.01.07, 18:19
  5. Antworten: 6
    Letzter Beitrag: 27.10.05, 17:05