该问题来自社区帖: https://bbs.csdn.net/topics/615547012.为符合问答规范, 该问题经过ChatGPT优化
问题:如何实现追加写入 RTF 文件? 解决方法:使用 StreamOut 的方式写入 RTF 文件。需要加入一句话(SeekToEnd),否则每次都会重新写文件,无法追加写入。但加入这句话则文件大小会增大很多。以下是写文件的相关代码: ```cpp BOOL CESSCTermTestDoc::OnSaveDocument(LPCTSTR lpszPathName) { //TODO: 在此添加专用代码和/或调用基类 CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd(); CESSCTermTestView *pEditView = (CESSCTermTestView *)pFrame->m_wndSplitter.GetPane(0, 1); CFile cFile; cFile.Open(lpszPathName, CFile::modeCreate | CFile::modeWrite | CFile::modeNoTruncate); EDITSTREAM es; es.dwCookie = (DWORD)&cFile; es.pfnCallback = StreamOutCallback; pEditView->m_richEditCtrl->StreamOut(SF_RTF, es); SetModifiedFlag(FALSE); return TRUE;; } //流出回调函数 DWORD CESSCTermTestDoc::StreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb) { CFile* pFile = (CFile*)dwCookie; pFile->SeekToEnd(); pFile->Write(pbBuff, cb); *pcb = cb; return 0; } ```
问题:如何实现追加写入 RTF 文件? 解决方法:使用 StreamOut 的方式写入 RTF 文件。需要加入一句话(SeekToEnd),否则每次都会重新写文件,无法追加写入。但加入这句话则文件大小会增大很多。以下是写文件的相关代码: ```cpp BOOL CESSCTermTestDoc::OnSaveDocument(LPCTSTR lpszPathName) { //TODO: 在此添加专用代码和/或调用基类 CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd(); CESSCTermTestView *pEditView = (CESSCTermTestView *)pFrame->m_wndSplitter.GetPane(0, 1); CFile cFile; cFile.Open(lpszPathName, CFile::modeCreate | CFile::modeWrite | CFile::modeNoTruncate); EDITSTREAM es; es.dwCookie = (DWORD)&cFile; es.pfnCallback = StreamOutCallback; pEditView->m_richEditCtrl->StreamOut(SF_RTF, es); SetModifiedFlag(FALSE); return TRUE;; } //流出回调函数 DWORD CESSCTermTestDoc::StreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb) { CFile* pFile = (CFile*)dwCookie; pFile->SeekToEnd(); pFile->Write(pbBuff, cb); *pcb = cb; return 0; } ```