Search code examples
c++filefile-iocstring

C++ read a file line by line but line type is CString or TCHAR


I get the following example

    CString line[100];

    //string line;
    ifstream myfile (_T("example.txt"));
    if (myfile.is_open())
    {
       while ( getline (myfile,line) )
       {
          cout << line << '\n';
       }
       myfile.close();
     }

How does that "line" can stored values ​​to type CString or TCHAR. I get an error like this:

error C2664: '__thiscall std::basic_ifstream >::std::basic_ifstream >(const char *,int)'

Please help me :)


Solution

  • First, this statement:

    CString line[100];
    

    defines an array of 100 CStrings: are you sure you want that?

    Or maybe you just want one CString to read each line into?

    // One line
    CString line;
    

    An option you have is to read the lines into a std::string, and then convert the result to CString:

    string line;
    ifstream myfile ("example.txt");
    if (myfile.is_open())
    {
       while (getline(myfile, line))
       {
          // Convert from std::string to CString.
          //
          // Note that there is no CString constructor overload that takes
          // a std::string directly; however, there are CString constructor
          // overloads that take raw C-string pointers (e.g. const char*).
          // So, it's possible to do the conversion requesting a raw const char*
          // C-style string pointer from std::string, calling its c_str() method.
          // 
          CString str(line.c_str());
    
          cout << str.GetString() << '\n';
       }
       myfile.close();
    }