在MFC中序列化为Unicode文本文件-文件头错误
Serializing to Unicode text file in MFC - wrong file header
我正在尝试序列化对象列表。对象本身仅包含CString成员。序列化是对文本文件进行的,以便创建人类可读的日志文件。问题是,为了编写Unicode字符串,文件需要具有Unicode编码的BOM(字节顺序标记)。
FILE *fStream = NULL;
VERIFY( _tfopen_s( &fStream, _T( "D:\Test.txt" ), _T( "wt,ccs=UNICODE" ) ) == 0 );
CStdioFile theFile;
theFile.m_pStream = fStream;
CArchive archive( &theFile, CArchive::store );
ListContainingObject.Serialize( archive );
在Serialize()
中,我试图写入元素的数量,因此用列表的大小调用CArchive::WriteCount()
。这会打乱BOM,例如,如果在记事本中打开文件,-
符号显示在文件的开头。
在HEX查看器中,文件头如下所示:ff fe 06 00
。我知道06是我写的清单的容量。我也知道-
可能具有ff fe 06 00
的ASCII值。问题是:
有没有什么方法可以把一个整数写到文件的开头,而不让它与字节顺序标记混淆,这样文本编辑器中就不会显示符号了?
哦,一切都会一团糟。如果序列化CString对象,它们也将按照列表的方式写入长度计数。
如果您只有一个字符串列表,那么请使用w wsprintf()或CString::Format()将计数转换为字符串。。。将计数写为字符串,并以换行符("\n")结束。将所有剩余的字符串写成以换行符结尾的字符串。如果你的字符串中有换行符,那么,你将不得不以某种方式逃离它。您可以将数据放在某种XML格式中。你有很多选择。
相关文章:
- C++系统找不到指定的文件错误
- C++语法头文件错误
- C++生成文件错误"implicit entry/start for main executable"
- C++/生成文件错误:未定义对"main"的引用
- VS2019:资源文件错误:中性(默认)(未知子语言:0x8)
- C++程序不制作文件(错误)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- "what does ":*** [可执行文件] 错误 1 " mean ?"
- 如何修复使用VScode调试器gcc调试时的"找不到文件"错误
- 在课堂上创建了一个朋友,给出"无输入文件"错误
- Qt .exe文件错误
- c++ 添加具有写入文件错误的文本变量
- 无法转换 .CATPart 文件.错误:输入文件路径似乎包含不支持的字符
- 写入文本文件错误,QT
- C++写入文件错误
- Windows Subsystem for Linux (WSL) 下的间歇性随机"找不到文件"错误
- 犰狳读取MAT文件错误
- 无法求解FullPathForFilename:COCOS2DX中可能缺少文件错误
- C Wininet FTP列出了许多文件错误
- 生成文件错误 - 找不到文件 - *.cpp