CStdioFile::ReadString



  • Hallo Gemeinde,

    ich habe mal eine Frage zum Verhalten von CStdioFile::ReadString in Verbindung mit einem CString.

    Wenn ich den folgenden Code auf eine Datei mit 480 Zeilen und 3MB Größen los lasse, braucht er fast 2 min zum lesen.

    CString line;
      CStringArray arr;
      CStdioFile file(L"test.txt", CFile::modeRead | CFile::typeText);
    
      while(file.ReadString(line))
      {
        arr.Add(line);
      }
    

    Wenn ich den Code nur leicht in den folgenden ändere, reden wir nur noch von 2 bis 3 s.

    wchar_t line[20000];
      CStringArray arr;
      CStdioFile file(L"test.txt", CFile::modeRead | CFile::typeText);
    
      while(file.ReadString(line,20000))
      {
        arr.Add(line);
      }
    

    Kann mir einer erklären, was an dem ersten Code so viel Zeit schluckt?

    Gruß Andreas Georg



  • Schau dir mal die Definitionen von ReadString an:

    MSDN schrieb:

    virtual LPTSTR ReadString(
    LPTSTR lpsz,
    UINT nMax
    );
    virtual BOOL ReadString(
    CString& rString
    );

    Das erste liefert einen LPTSTR zurück. Weiß jetzt nicht wie man den in einen bool castet. Beim zweiten kommt ein BOOL zurück, was ja für das while schon mal ziemlich günstig ist.



  • Danke,

    das ist es nicht. Der LPTSTR wird NULL wenn das Dateiende errreicht ist.

    Aber ich habe den Fehler gefunden, wie fast immer ist die Lib nicht Schuld. In meinem Prog was das zu lesende File erzeugt hatte ich einen Fehler und habe mir so eine Zeile mit 3MB Daten gebaut. Da kann die MFC nichts für 😉

    Gruß Andreas Georg


Log in to reply