使用CStdioFile写入字符串



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

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。有人能解开那个谜吗?

新的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"Test123rn";
ss << L"ελληνικάrn";
f.WriteString(ss.str().c_str());

编辑

顺便说一下,您也可以使用std::wofstreampubsetbuf直接写入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);

相关内容

  • 没有找到相关文章

最新更新