C++ 逐行读取文件,但行类型为 CString 或 TCHAR
Posted
技术标签:
【中文标题】C++ 逐行读取文件,但行类型为 CString 或 TCHAR【英文标题】:C++ read a file line by line but line type is CString or TCHAR 【发布时间】:2014-04-07 10:54:11 【问题描述】:我得到以下示例
CString line[100];
//string line;
ifstream myfile (_T("example.txt"));
if (myfile.is_open())
while ( getline (myfile,line) )
cout << line << '\n';
myfile.close();
那个“行”怎么能把值存储到CString或者TCHAR类型。我收到这样的错误:
错误 C2664:'__thiscall std::basic_ifstream >::std::basic_ifstream >(const char *,int)'
请帮帮我:)
【问题讨论】:
读取到 std::string (std::string line;) 然后按照 MSDN 的建议转换为 CString - msdn.microsoft.com/en-us/library/ms235631(v=vs.80).aspx 你能举个例子吗? 【参考方案1】:首先,这个声明:
CString line[100];
定义了一个 数组 100 CString
s:你确定你想要那个吗?
或者也许您只是希望 一个 CString
将每一行读入?
// One line
CString line;
您可以选择将这些行读入std::string
,然后将结果转换为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();
【讨论】:
我收到一个错误:错误 C2039: 'GetString' : is not a member of 'CString',如何解决? @MyrdaSahyuti:你用的是什么编译器??GetString()
至少从 VS2005 开始就是 CString
的成员。不管怎样,试试cout << static_cast<const TCHAR*>(str) << '\n'
。
我使用的是visual c++ 6.0
@MyrdaSahyuti:我怀疑 :)【参考方案2】:
std::getline()
的第二个参数需要std::string
,所以先用std::string
,再转换成CString
string str_line;
ifstream myfile (_T("example.txt"));
if (myfile.is_open())
while ( getline (myfile, str_line) )
CString line(str_line.c_str());
cout << line << '\n';
myfile.close();
【讨论】:
以上是关于C++ 逐行读取文件,但行类型为 CString 或 TCHAR的主要内容,如果未能解决你的问题,请参考以下文章