2016-03-29 16 views
1

Ich möchte Daten in einem Vektor in eine Datei geschrieben schreiben. Deshalb verwende ich die folgende Routine:Verwenden von CStdioFile zum Schreiben von Zeichenfolge

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; 
} 

Das Problem ist: Es gibt zwar Daten in s ist, ist die Ausgabedatei immer NULL. Kann jemand dieses Geheimnis lösen?

+0

Try 'outputFile.WriteString (CString (s zu streamen. c_str())); 'CString hat eingebaute Konverter zu/von Unicode – cha

Antwort

1

Neue MFC-Projekte werden als Unicode erstellt, also nehme ich an, dass dies Unicode ist.

Auch die Nutzung von (LPCTSTR) schlagen Sie eine Fehlermeldung erhalten und Sie versuchen, durch Gießen

Sie (es funktioniert nicht) zu beheben sollen die Datei als Unicode erstellen und breite Zeichenfolge std:: Funktionen wie std::wstring oder std::wstringstream

Beispiel:

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()); 

bearbeiten

By the way, können Sie auch std::wofstream mit pubsetbuf verwenden, um direkt zu schreiben, in Unicode

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

Und in ähnlicher Weise verwenden std::wifstream zu öffnen um den Strom

std::wifstream fin(L"test.txt", std::ios::binary); 
wchar_t buf[128]; 
fin.rdbuf()->pubsetbuf(buf, 128); 
+0

perfekt! Vielen Dank! – Michen

Verwandte Themen