CStdioFile之ReadString()与WriteString()注意事项
简介:
CStdioFile
CObject |
└CFile |
└CStdioFile |
文本方式提供对硬回车—换行符对的特殊处理:
当你将一个换行符(0x0A)写入一个文本方式的CStdioFile对象时,字节对(0x0A,0x0D)被发送给该文件,即自动将"\n"扩展为了"\r\n",个人认为这可能是Windows做的一种兼容,但有利却也有弊;
当你读一个文件时,字节对(0x0A,0x0D)被翻译为一个字节(0x0A)。
CStdioFile类成员
数据成员
m_pStream | 包含了一个指向打开文件的指针 |
构造
CStdioFile | 从一个路径或文件指针构造一个CStdioFile对象 |
文本读/写
ReadString | 读取一行文本 |
WriteString | 写一行文本 |
函数原型:
virtual LPTSTR ReadString( LPTSTR lpsz, UINT nMax );
BOOL ReadString(CString& rString);
virtual void WriteString( LPCTSTR lpsz );
注意事项:
读取写文件时,有时为了图方便,喜欢使用 ReadString()和WriteString(),因为毕竟这个可以按行读写,不用我们关心行区分。
但却殊不知ReadString()和WriteString()对“\n”的兼容坏了我的大事 ,例如:
//打开文件
CStdioFile f;
CFileException e;
if (!f.Open("D:\\test.txt", CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite | CFile::shareDenyNone, &e))“”
{return FALSE;
}f.WriteString("E:\jiangqin\GameLinker\GameLinker\版本回退\Fiddler\Fiddler.exe\r\n");
f.WriteString("E:\jiangqin\GameLinker\GameLinker\版本回退\Fiddler\ExecAction.exe\r\n");
f.WriteString("E:\jiangqin\GameLinker\GameLinker\版本回退\Fiddler\fiddler.exe.config\r\n");
f.WriteString("E:\jiangqin\GameLinker\GameLinker\版本回退\Fiddler\FiddlerHook\chrome.manifest\r\n");
f.WriteString("E:\jiangqin\GameLinker\GameLinker\版本回退\Fiddler\FiddlerHook\Content\about.xul\r\n");
f.Close();//读文件
f.Open(m_sUpgradeFile, CFile::modeRead);
CString sFile = "";
vector<CString> vecFile;
while (m_hUpgradeFile.ReadString(sFile))
{vecFile.push_back(sFile);
}
结果如下:
E:\jiangqin\GameLinker\GameLinker\版本回退\Fiddler\Fiddler.exe\r
E:\jiangqin\GameLinker\GameLinker\版本回退\Fiddler\ExecAction.exe\r
E:\jiangqin\GameLinker\GameLinker\版本回退\Fiddler\fiddler.exe.config\r
E:\jiangqin\GameLinker\GameLinker\版本回退\Fiddler\FiddlerHook\chrome.manifest\r
E:\jiangqin\GameLinker\GameLinker\版本回退\Fiddler\FiddlerHook\Content\about.xul\r
结果每个文件名结尾都有一个"\r",这显示不是我期望的。为什么会这样呢?原因如下:
因为WriteString()写文件的时候,会自动将"\n"扩展为"\r\n",这样我们所加的"\r\n"就变成了"\r\r\n",</span></span
故在写文件时,字符串结尾只需要加"\n"即可,这样按行读取的数据结尾才不会包含"\r"。
CStdioFile之ReadString()与WriteString()注意事项相关推荐
- CFile、CStdioFile、FILE和其他文件操作(转)
CFile //创建/打开文件 CFile file; file.Open(_T("test.txt"),CFile::modeCreate|CFile::modeNoTrunca ...
- CFile、CStdioFile、FILE和其他文件操作
CFile //创建/打开文件 CFile file; file.Open(_T("test.txt"),CFile::modeCreate|CFile::modeNoTrunca ...
- 使用CStdioFile操作文件
文件操作在VC编程中使用非常普遍,直接使用CFile对文件进行操作比较繁琐,使用继承自CFile的CStdioFile类就要容易得多,用CStdioFile 来处理字符串,是最简单最好理解的的办法.本 ...
- 使用CStdioFile操作文件和filetxt.cpp报错和filecore.cpp报错
1.打开文件: file.Open(FileName, CFile::modeCreate|CFile::modeReadWrite|CFile::modeNoTruncate); 打开文件主要需要传 ...
- MFC CFile CStdioFile文件学习
CFile类 1.特点 (1) MFC中文件类的基类. (2) 二进制(字节)读写. (3) 带参数的构造函数自动打开文件,析构自动关闭文件. (4) 文件打开方式组合:5个类 ...
- CFile、CStdioFile、FILE和其他文件操作(转+总结)
CFile //创建/打开文件 CFile file; file.Open(_T("test.txt"),CFile::modeCreate|CFile::modeNoTrunca ...
- C++ 如何用创建txt文件,并且写入内容(汇总)
void CreatTxt(char* pathName, unsigned char* rBuffer,int length)//创建txt文件 { //char* path = "C: ...
- MFC中的文件读写技术
计算机室如何管理自身所存放着的大量的信息的呢?windows的磁盘管理程序为我们提供了一套严密而又高效的信息组织形式--硬盘上的信息是以文件的形式被管理的. 面向存储的文件技术 什么是文件?计算机中, ...
- MFC 教程【11_MFC下的文件类 】
MFC下的文件类 文件操作的方法 使用Visual C++编程,有如下方法进行文件操作: (1)使用标准C运行库函数,包括fopen.fclose.fseek等. (2)使用Win16下的文件和目录操 ...
最新文章
- iOS11、iPhone X、Xcode9 适配指南
- 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(一)
- 一文看懂AI数据采集标注未来三年的发展和趋势
- 自动驾驶技术之——虚拟场景数据库研究
- mysql 1366in_如何实战解决mysql#1366错误
- python为什么没有点击就触发_Ai中没有触发的触发器
- a - 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历_数据结构--图
- ffmpeg 过程分析
- 树莓派4支持多大tf卡_树莓派raspberry4B入坑指南 part-0
- 智慧水务技能——SWMM、最优化与预测理论及三维动态可视化
- java white case语句_MySQL的CASEWHEN语句使用说明_MySQL
- Realsense D435i 使用
- SpringBoot使用Quartz定时器实现Email信息轰炸
- 62. 丑数(剑指Offer经典题)
- 红帽linux安装打印机教程,RHEL5下安装纯文本打印机试验步骤记
- java自动发图文微博_使用node搭建自动发图文微博机器人的方法
- 网页最窄770px最宽1024px经典布局
- java中sha1解密_SHA1解密
- 劳伦杰克逊写给姚明的情书:你的名字
- 元数据与数据治理实战|Hadoop发展历程(1)
热门文章
- http://nian.so/#网站的拓展工具编写
- Atom 修改Atom快捷键 实测可行
- studiolibrary安装_初学者daz studio中文基础安装布局教程
- 数据分析02-线性回归
- .NFT Framework简介
- git checkout到新的分支之后原来未提交的代码找回
- 实现isPrime()函数,参数为整数,要有异常处理,如果整数是质数,输出“是”,如果不是质数,输出“不是”。
- linux中audit服务,linux下的audit服务
- 正规的棋牌游戏开发公司需要具备哪些条件
- vue js 复制div区域内容