调用函数时,仅保留最新的字符串 例如)第一次调用“ 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"
答案 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
)