我想将存储在矢量中的数据写入文件。因此,我使用以下例程:
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::wstring
或std::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::wofstream
和pubsetbuf
直接写入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);