如何在C++上附加字符串
how to append string on C++
当它调用函数时,只剩下最新的字符串例如)第一次呼叫"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::typeBinary
以CStdioFile
)