积极答复者
vc++输出txt文本中如何换行?

问题
-
CFile cfile(_T("圆曲线要素.txt"),CFile::modeCreate | CFile::modeWrite);
CArchive ar(&cfile, CArchive::store);
int m = 0;
for (m = 0; m < i; m++)
{
ar << sum[m];
//ar.WriteString(sum[m]);
//ar.WriteString(_T("\r\n"));
}输出到文本中无法换行,改成和 ar << sum[m]<<"\r\n";和ar<<sum[m]<<"000D"<<"000A";都不换行,请问该怎么办?
答案
-
具体我不是很了解, 刚刚尝试了一下, 一起讨论讨论.
CArchive.WriteString()函数是用来写一行字符串的, 因此如果你把\n放在字符串末尾是可以成功换行的.
若将\n至于字符串中间写入文件, 使用记事本查看文件, 其中并不会出现换行的情况,
但实际上你再次使用CArchive.ReadString() 读取一行只能读取\n前面的内容. 因此可以看出, '\n'是成功写入了的, 但是在记事本中是以不可见的空白字符存在. 事实上, 如果你把记事本中的所有字符复制到另一个编辑环境(如vs)中, 就可能会出现换行了.
序列化写入:
CFile file(_T("t.txt"), CFile::modeCreate | CFile::modeWrite); CArchive ar(&file, CArchive::store); ar.WriteString(_T("Line1\n Line2")); // 文件内容是"Line1 Line2" ar.Close(); file.Close();
序列化读取:
CFile file(_T("t.txt"), CFile::modeRead); CArchive ar(&file, CArchive::load); CString cstr; ar.ReadString(cstr); //读取之后, cstr的值为"Line1" ar.Close(); file.Close();
小问一下, 如果是把字符串写到文件中, 为什么要用序列化的方式呢, 直接用文件读写不是更好吗?
-
直接这样就可以了:
try { CFile file(_T("F:\\11.txt"), CFile::modeCreate | CFile::modeWrite); char szText[] = "Hello, World!"; char szBuf[] = {'\0', '\r', '\n', '\0'}; for(size_t i = 0; i != strlen(szText); ++i) { szBuf[0] = szText[i]; file.Write(szBuf, strlen(szBuf) * sizeof(char)); } file.Close(); } catch (CException* e) { e->ReportError(); e->Delete(); }
Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
全部回复
-
具体我不是很了解, 刚刚尝试了一下, 一起讨论讨论.
CArchive.WriteString()函数是用来写一行字符串的, 因此如果你把\n放在字符串末尾是可以成功换行的.
若将\n至于字符串中间写入文件, 使用记事本查看文件, 其中并不会出现换行的情况,
但实际上你再次使用CArchive.ReadString() 读取一行只能读取\n前面的内容. 因此可以看出, '\n'是成功写入了的, 但是在记事本中是以不可见的空白字符存在. 事实上, 如果你把记事本中的所有字符复制到另一个编辑环境(如vs)中, 就可能会出现换行了.
序列化写入:
CFile file(_T("t.txt"), CFile::modeCreate | CFile::modeWrite); CArchive ar(&file, CArchive::store); ar.WriteString(_T("Line1\n Line2")); // 文件内容是"Line1 Line2" ar.Close(); file.Close();
序列化读取:
CFile file(_T("t.txt"), CFile::modeRead); CArchive ar(&file, CArchive::load); CString cstr; ar.ReadString(cstr); //读取之后, cstr的值为"Line1" ar.Close(); file.Close();
小问一下, 如果是把字符串写到文件中, 为什么要用序列化的方式呢, 直接用文件读写不是更好吗?
-
直接这样就可以了:
try { CFile file(_T("F:\\11.txt"), CFile::modeCreate | CFile::modeWrite); char szText[] = "Hello, World!"; char szBuf[] = {'\0', '\r', '\n', '\0'}; for(size_t i = 0; i != strlen(szText); ++i) { szBuf[0] = szText[i]; file.Write(szBuf, strlen(szBuf) * sizeof(char)); } file.Close(); } catch (CException* e) { e->ReportError(); e->Delete(); }
Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.