Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Stringsalat bei CFile::Read

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.06.2005, 16:10 Uhr
GuenniAtWork



Hi,

Ich will zwei Editfelder mit jeweils dem inhalt aus zwei Textdateien füllen.

Also erstmal Code:

C++:
void CRunAppTabDlg::AdvancedInfo()
{
    CString sKeyFile = "Produktschlüssel.txt";
    CString sInstallPath = "Installationspfad.txt";
    CString sProgrammPath = m_strRunAppPath.Left(m_strRunAppPath.ReverseFind('\\') + 1);
    CString sInfoFile = sProgrammPath + sKeyFile;
    CString sInfoFileContent;
    for (int i = 0; i < 2 ; ++i)
    {
        if (FileExists(sInfoFile) == ERROR_SUCCESS)
        {
            CFile* pFile = new CFile();
            pFile->Open(sInfoFile, CFile::modeRead);
            pFile->Read((LPSTR)(LPCTSTR)sInfoFileContent,pFile->GetLength());            
            if (pFile->GetFileName() == sKeyFile)
            {
                GetDlgItem(IDC_ED_APPKEY)->SetWindowText(sInfoFileContent);
            }else
            {
                GetDlgItem(IDC_ED_INSTALLPATH)->SetWindowText(sInfoFileContent);
            }
            pFile->Close();
            pFile = NULL;
            delete pFile;
        }
        sInfoFile = sProgrammPath + sInstallPath;
    }
}


Also wenn der Text der 1. Datei länger als der text der 2. Datei ist, steht in dem 2. Editfeld zwar der Text der 2. Datei, aber da hängt das Ende des textes der 1. Datei noch dran.

z.B:
Datei 1: Hallihallo
Datei 2: Hallo
Ergebnis:
Edit 1: Hallihallo
Edit 2: Hallohallo

Wie kann ich das verhindern?
Ich habe schon versucht sInfoFileContent zu leeren, aber das bringt nichts.
--
Gruß GuenniAtWork
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.06.2005, 16:36 Uhr
Tommix



Was ist denn das für ein Gewurstel?

Zitat von GuenniAtWork:


C++:
            pFile->Close();
            pFile = NULL;
            delete pFile;




Wenn pFile NULL ist, braucht Du's nicht mehr löschen. Überhaupt gibt's hier keinen Grund auf den Heap zu gehen. Versuch mal etwas in der Richtung:

C++:
    for (int i = 0; i < 2 ; ++i)
    {
        try
        {
            CStdioFile file(sInfoFile, CFile::modeRead | CFile::typeText);
            CString content;
            file.ReadString(content);

            if (file.GetFileName() == sKeyFile)
            {
                GetDlgItem(IDC_ED_APPKEY)->SetWindowText(content);
            }else
            {
                GetDlgItem(IDC_ED_INSTALLPATH)->SetWindowText(content);
            }
        }
        catch (CException* pEx)
        {
            pEx->ReportError();  // bei Bedarf
            pEx->Delete();
        }

        sInfoFile = sProgrammPath + sInstallPath;
    }


Wenn Du keine Schleife nimmst, sondern das Ganze zwei mal hintereinander schreibst, sparst Du das if, die Zuweisung am Ende und das Konstrukt wird deutlich lesbarer.

- Tommix

Dieser Post wurde am 22.06.2005 um 16:38 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.06.2005, 09:37 Uhr
GuenniAtWork



Mal wieder Top Hilfe!!
--
Gruß GuenniAtWork

Dieser Post wurde am 23.06.2005 um 09:41 Uhr von GuenniAtWork editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: