简介:

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()注意事项相关推荐

  1. CFile、CStdioFile、FILE和其他文件操作(转)

    CFile //创建/打开文件 CFile file; file.Open(_T("test.txt"),CFile::modeCreate|CFile::modeNoTrunca ...

  2. CFile、CStdioFile、FILE和其他文件操作

    CFile //创建/打开文件 CFile file; file.Open(_T("test.txt"),CFile::modeCreate|CFile::modeNoTrunca ...

  3. 使用CStdioFile操作文件

    文件操作在VC编程中使用非常普遍,直接使用CFile对文件进行操作比较繁琐,使用继承自CFile的CStdioFile类就要容易得多,用CStdioFile 来处理字符串,是最简单最好理解的的办法.本 ...

  4. 使用CStdioFile操作文件和filetxt.cpp报错和filecore.cpp报错

    1.打开文件: file.Open(FileName, CFile::modeCreate|CFile::modeReadWrite|CFile::modeNoTruncate); 打开文件主要需要传 ...

  5. MFC CFile CStdioFile文件学习

    CFile类 1.特点 (1)    MFC中文件类的基类. (2)    二进制(字节)读写. (3)    带参数的构造函数自动打开文件,析构自动关闭文件. (4)    文件打开方式组合:5个类 ...

  6. CFile、CStdioFile、FILE和其他文件操作(转+总结)

    CFile //创建/打开文件 CFile file; file.Open(_T("test.txt"),CFile::modeCreate|CFile::modeNoTrunca ...

  7. C++ 如何用创建txt文件,并且写入内容(汇总)

    void CreatTxt(char* pathName, unsigned char* rBuffer,int length)//创建txt文件 {  //char* path = "C: ...

  8. MFC中的文件读写技术

    计算机室如何管理自身所存放着的大量的信息的呢?windows的磁盘管理程序为我们提供了一套严密而又高效的信息组织形式--硬盘上的信息是以文件的形式被管理的. 面向存储的文件技术 什么是文件?计算机中, ...

  9. MFC 教程【11_MFC下的文件类 】

    MFC下的文件类 文件操作的方法 使用Visual C++编程,有如下方法进行文件操作: (1)使用标准C运行库函数,包括fopen.fclose.fseek等. (2)使用Win16下的文件和目录操 ...

最新文章

  1. iOS11、iPhone X、Xcode9 适配指南
  2. 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(一)
  3. 一文看懂AI数据采集标注未来三年的发展和趋势
  4. 自动驾驶技术之——虚拟场景数据库研究
  5. mysql 1366in_如何实战解决mysql#1366错误
  6. python为什么没有点击就触发_Ai中没有触发的触发器
  7. a - 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历_数据结构--图
  8. ffmpeg 过程分析
  9. 树莓派4支持多大tf卡_树莓派raspberry4B入坑指南 part-0
  10. 智慧水务技能——SWMM、最优化与预测理论及三维动态可视化
  11. java white case语句_MySQL的CASEWHEN语句使用说明_MySQL
  12. Realsense D435i 使用
  13. SpringBoot使用Quartz定时器实现Email信息轰炸
  14. 62. 丑数(剑指Offer经典题)
  15. 红帽linux安装打印机教程,RHEL5下安装纯文本打印机试验步骤记
  16. java自动发图文微博_使用node搭建自动发图文微博机器人的方法
  17. 网页最窄770px最宽1024px经典布局
  18. java中sha1解密_SHA1解密
  19. 劳伦杰克逊写给姚明的情书:你的名字
  20. 元数据与数据治理实战|Hadoop发展历程(1)

热门文章

  1. http://nian.so/#网站的拓展工具编写
  2. Atom 修改Atom快捷键 实测可行
  3. studiolibrary安装_初学者daz studio中文基础安装布局教程
  4. 数据分析02-线性回归
  5. .NFT Framework简介
  6. git checkout到新的分支之后原来未提交的代码找回
  7. 实现isPrime()函数,参数为整数,要有异常处理,如果整数是质数,输出“是”,如果不是质数,输出“不是”。
  8. linux中audit服务,linux下的audit服务
  9. 正规的棋牌游戏开发公司需要具备哪些条件
  10. vue js 复制div区域内容