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

how to append string on C++

本文关键字:字符串 C++      更新时间:2023-10-16

当它调用函数时,只剩下最新的字符串例如)第一次呼叫"ABC"第二次呼叫"Def"最佳结果是"abc""def",实际结果是"def"

视觉 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("rn"); // windows change a line
    archiveContent.WriteString(strOneRecord);
}

例如) 第一次呼叫"abc"和第二次呼叫"def"

预期结果为"abcrndef"

实际结果 : "def"

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

问题是您覆盖了旧文件。您必须使用 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);
}

您还可以获取 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();
}

(如果您自己处理"rn",请添加CFile::typeBinaryCStdioFile