2016-03-29 45 views
1

我想寫入存儲在一個向量中的數據到文件中。因此,我使用以下例程:使用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。任何人都可以解開這個謎團嗎?

+0

嘗試'outputFile.WriteString(CString的(一個或多個。 c_str()));'CString內置的轉換器完全支持Unicode – cha

回答

1

新的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"Test123\r\n"; 
ss << L"ελληνικά\r\n"; 

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

編輯

順便問一下,你也可以使用std::wofstreampubsetbuf直接寫在統一

到流
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); 
+0

!謝謝! – Michen