как добавить строку на C ++ - PullRequest
0 голосов
/ 21 января 2019

когда вызывается функция, остается только последняя строка пр) первый вызов "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 голосов
/ 21 января 2019

Вы правильно добавляете одну строку в другую.

Проблема в том, что вы перезаписали старый файл.Вы должны открыть файл с помощью 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();
}

(добавьте CFile::typeBinary для CStdioFile, если вы обрабатываете "\r\n" самостоятельно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...