似乎无法逐行读取ifstream的tmp文件

时间:2017-05-01 10:31:36

标签: c++ mfc

想知道我做错了什么。我有一个文件(file.tmp),其内容为:c:\ users \ documents \ file \ folder \ myfile.txt。我想用这段代码读取tmp文件:

    std::ifstream istream(csTempPath);
    std::string s;
    if (istream.is_open()){
            int i = 1;
            while (std::getline(istream, s))
            {
                CString cs;
                cs.Format(L"Reading: %s", s);

                OutputDebugString(cs);
                i++;
            }
            istream.close();
        }
    else{
            OutputDebugString(L"Could not read the temp file.");
    }

我得到的输出是:

[4376] Reading: ??
[4376] Reading: ??

我希望它能得到这个:c:\users\documents\file\folder\myfile.txt但是由于某些原因我得到了,我尝试了各种各样的方法,但我似乎不知道什么是错的。 BTW我是一名初学程序员。

1 个答案:

答案 0 :(得分:2)

%s格式说明符需要const char*(或const wchar_t*,具体取决于您的字符编码设置),但您传递的是std::string对象。您需要调用其c_str成员:

CStringA cs;
cs.Format("Reading: %s", s.c_str());

OutputDebugStringA(cs);

或者,当使用Unicode字符编码时(如您所见):

CStringW cs;
cs.Format(L"Reading: %S", s.c_str());

OutputDebugStringW(cs);

请注意,后者使用Microsoft特定的扩展名,格式说明符类型%S,用于执行ANSI编码和Unicode之间的字符编码转换。