如何在C ++上附加字符串

时间:2019-01-21 03:18:05

标签: c++ mfc

调用函数时,仅保留最新的字符串 例如)第一次调用“ abc”,第二次调用“ def” 最好的结果是“ abc” \ n“ def”,实际结果是“ def”

Visual 6.0 C ++

void PrintCSV(CArchive &archiveContent, CStringList &strList, CString szSeparator)
{
    if( strList.IsEmpty() )
        return;

    CString strOneRecord;
    POSITION posTail = strList.GetTailPosition();
    POSITION pos;

    for( pos = strList.GetHeadPosition(); pos != posTail; )
    {
        CString str = strList.GetNext( pos );
        strOneRecord += str;
        strOneRecord += szSeparator;
        strOneRecord += "\t";
    }

    strOneRecord += strList.GetNext(posTail);
    strOneRecord += _T("\r\n"); // windows change a line
    archiveContent.WriteString(strOneRecord);
}

ex)第一次通话"abc"和第二次通话"def"

预期结果为"abc\r\ndef"

实际结果:"def"

1 个答案:

答案 0 :(得分:0)

您正确地将一个字符串附加到另一个字符串。

问题是您覆盖了旧文件。您必须使用admin/cfmysqlweb打开文件并转到文件末尾:

CFile::modeNoTruncate

您还可以获取CFile file; if (file.Open(filename, CFile::modeWrite | CFile::modeCreate | CFile::modeNoTruncate)) { file.SeekToEnd(); CArchive ar(&file, CArchive::store); PrintCSV(ar, strList, szSeparator); } 的{​​{1}}的句柄并转到文件末尾:

CArchive

请注意,CFile通常用于序列化。如果您不进行序列化,请跳过ar.GetFile()->SeekToEnd(); 。直接使用CArchive,或如下使用CArchive

CFile

(如果您自己处理CStdioFile,则为CStdioFile file; if(file.Open(filename, CFile::typeBinary | CFile::modeWrite | CFile::modeCreate | CFile::modeNoTruncate)) { file.SeekToEnd(); file.WriteString(str); file.Close(); } 添加CFile::typeBinary