Noch ein Problem



  • also ich habe jetzt schon wieder an der Datei rumgespielt und einiges geendert (wenn was falsch ist nicht meckern viles habe ich jetzt zum testen geendert) ich glaube ich weiß auch wie es geht aber hier ist der Code :

    void CMy1Dlg::OnButton1() 
    {
    
    UpdateData(TRUE);
    CFile f;
    CFileException fileException;
    f.Open( m_datei , CFile::modeCreate | CFile::modeReadWrite, &fileException );
    
    f.Write("<html><head><title>" , 20 );
    
    f.Write(m_uber, sizeof( m_uber ));
    
    f.Write("</title></head>" , 20 );
    
    f.Write("<body>",7);
    
    f.Write(m_text,m_text.GetLength() );
    
    f.Write("</body>",8);
    
    f.Write("</html>",8);
    
    f.Seek( 0, CFile::begin );
    
    UpdateData(FALSE);
    }
    


  • Also ich habe jetzt mit hilfe der msdn ein bisschen umgeschreiben (geht aber immer noch nicht) hier ist der gesamt Lese\schreib Code:

    void CMy1Dlg::OnButton1() 
    {
    
    UpdateData(TRUE);
    CFile f;
    CFileException fileException;
    f.Open( m_datei , CFile::modeCreate | CFile::modeReadWrite, &fileException );
    
    f.Write("<html><head><title>" , 20 );
    
    f.Write(m_uber, sizeof( m_uber ));
    
    f.Write("</title></head>" , 20 );
    
    f.Write("<body>",7);
    
    f.Write(m_text,m_text.GetLength() );
    
    f.Write("</body>",8);
    
    f.Write("</html>",8);
    
    f.Seek( 0, CFile::begin );
    
    UpdateData(FALSE);
    }
    
    void CMy1Dlg::OnButton3() 
    {
    TCHAR text[1000];
    CFile myFile;
    CFileException fileException;
    
    if ( !myFile.Open( m_datei, CFile::modeRead), &fileException )
    {
        myFile.Read(text,999);
        m_strOutput = text;
    
        TRACE( "Datei %s kann nicht geöffnet werden, Fehler = %u\n",
           m_datei, fileException.m_cause );
    }
    
    UpdateData(FALSE);
    }
    


  • und da haben wirs schon 🙂

    jedesmal, wenn du Write machst schreibst du einen string in das file. Ein string hat am ende ein nullzeichen. Dieses wird auch immer fleissig mit reingeschrieben. Das funzt beim schreiben wunderbar.

    Wenn du jetzt aber wieder auslesen willst, liest du das ganze File in einem Rutsch ein und machst daraus einen string. Dieser string ist aber dann nur so lang, bis das erste nullzeichen erreicht ist. Dieses nullzeichen ist aber schon direkt hinter "<html><head><title>", also wird dein string auch nur das enthalten.

    abhilfe würde WriteString und ReadString aus CStdioFile bringen, oder du speichers die nullzeichen nicht mit (also nur die anzahl der zeichen bei write
    angeben) ... Ich würd CStdioFile vorziehen, weils so schön easy ist.

    [edit]
    noch ne lösung ... mach dir einen String und schreib den ins file ... Wenn du einen String auslesen willst, solltest du auch einen String reinschreiben.

    ...
    CString text;
    
    text += "<html><head><title>";
    text += m_uber;
    text += "</title></head>";
    ...
    f.Write(text,text.GetLength());
    

    [/edit]

    grüsse

    [ Dieser Beitrag wurde am 31.03.2003 um 15:58 Uhr von soUrcerer editiert. ]



  • Hm, man könnte ja auch ganz einfach die Zeichen in den Zeichenketten zählen, OHNE SICH zu verzählen.

    f.Write("</title></head>" , 20 );  // Wo sind das 20 Zeichen ?
    f.Write("<body>",7); // Wo sind das 7 Zeichen ?
    


  • Hm, man könnte ja auch ganz einfach die Zeichen in den Zeichenketten zählen, OHNE SICH zu verzählen.

    f.Write("</title></head>" , 20 ); // Wo sind das 20 Zeichen ?
    f.Write("<body>",7); // Wo sind das 7 Zeichen ?

    was hat den das für auswirkungen das die Zahlen nicht stimmen ?



  • oh, das hat sehrwohl auswirkungen *lol*

    aber da überleg mal selber, genug infos haste ja jetzt dazu

    grüsse



  • hab jetzt ausprobiert , wenn die Zahlen stimmen gehen die Leerzeichenweg , soviel hab ich rausgefunden , jetzt muss ich nur noch den Text hinbekommen ...



  • erstmal danke , das funzt jetzt , also ich schreibe jetzt so :

    UpdateData(TRUE);
    CFile f;
    CFileException fileException;
    f.Open( m_datei , CFile::modeCreate | CFile::modeReadWrite, &fileException );
    
    CString haupt;
    
    haupt += "<html><head><title>";
    
    haupt += m_uber;
    
    haupt += "</title></head>";
    
    haupt += "<body>";
    
    haupt += m_text;
    
    haupt += "</body>";
    
    haupt += "</html>";
    
    f.Write(haupt,haupt.GetLength());
    
    f.Seek( 0, CFile::begin );
    
    UpdateData(FALSE);
    

    und lese so :

    {
    TCHAR text[1000];
    CFileDialog m_ldFile(TRUE,"html","*.html",OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY,"HTML-Dateien *.html",this);
    CString m_pathname; 
    m_pathname += m_ldFile.GetFileName();
    if (m_ldFile.DoModal() == IDOK)
    {
          m_pathname = m_ldFile.GetPathName();
    }
    CFile datei(m_pathname, CFile::modeRead); 
    datei.Read(text,sizeof (text)); 
    datei.Close(); 
    m_strOutput = text;
    UpdateData(FALSE);
    }
    

    jetzt habe ich nur das Problem das er die "überflüssigen" Zeichen mit sowas ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ auffühlt , wie bekomme ich das weg , dann hab ichs 🙂



  • nullzeichen 🙂

    ...
    int count = datei.Read(text,sizeof (text)); 
    datei.Close(); 
    text[count] = 0;
    ...
    


  • es geht , DANKE AN ALLE !!!


Anmelden zum Antworten