1

我想将存储在向量中的数据写入文件。因此,我使用以下例程:

bool Grid::saveToFile() {
    stringstream sstream;
    for (size_t i = 0; i < taglist.size(); ++i)
    {
        if (i != 0)
            sstream << ",";
        sstream << taglist[i];
    }
    string s = sstream.str();

    CFileDialog FileDlg(FALSE);

    if (FileDlg.DoModal() == IDOK) {
        CString pathName = FileDlg.GetPathName();
        CStdioFile outputFile(pathName, CFile::modeWrite | CFile::modeCreate);
        outputFile.WriteString((LPCTSTR)s.c_str());
        outputFile.Close();
        return TRUE;
    }

    return FALSE;
}

问题是:虽然s中有数据,但输出文件始终为NULL。谁能解开这个谜?

4

1 回答 1

1

新的 MFC 项目是作为 Unicode 创建的,所以我假设这是 Unicode。

此外,您的使用(LPCTSTR)表明您遇到了错误,并且您尝试通过强制转换来修复(它不起作用)

您应该将文件创建为 Unicode,并使用宽字符串std::函数,例如std::wstringstd::wstringstream

例子:

CStdioFile f(L"test.txt", 
    CFile::modeWrite | CFile::modeCreate | CFile::typeUnicode);

std::wstringstream ss;
ss << L"Test123\r\n";
ss << L"ελληνικά\r\n";

f.WriteString(ss.str().c_str());

编辑

顺便说一句,您也可以使用std::wofstreamwithpubsetbuf直接写入 Unicode 流

std::wofstream fout(L"test.txt", std::ios::binary);
wchar_t buf[128];
fout.rdbuf()->pubsetbuf(buf, 128);
fout << L"Test1234, ";
fout << L"ελληνικά, ";

并同样用于std::wifstream打开流

std::wifstream fin(L"test.txt", std::ios::binary);
wchar_t buf[128];
fin.rdbuf()->pubsetbuf(buf, 128);
于 2016-03-29T17:44:29.380 回答