使用 CFile 的子类 CStdioFile 的注意事项
目前为止只用到了 ReadString,也了解了一下 WriteString。
由于程序需要,本来程序中是用的CFile, 但是需要逐行读取文件数据,所以谷歌找到了 ReadString 类 —— 继承于CFile,是CFile 的派生类
当使用 WriteString 往文件中存以行为单位的数据时,后面不要加 \r 或 \n,因为你已经告诉程序了,这是一行的数据,它会自动加上行符号。否则,当使用 ReadString 读取以 WriteString 存储的数据时,数据会多出一个 \r .
以下是个人使用。
CString strPath;
CString strRead;
TCHAR PathPro[] = {};
GetCurrentDirectoryW(,PathPro); //PathPro: current dir path
strPath = CString(PathPro)+_T("\\") + SCRIPT_FILE_NAME; //SCRIPT_FILE_NAME: "User_Script.txt" CStdioFile f;
CFileException e;
if(!f.Open(strPath,CFile::modeRead) )
return FALSE;
while(f.ReadString(strRead)) //如果文件未读完,返回true,否则返回false。
{
CString strTemp;
strTemp.Format(_T("\n{{ %s }}"),strRead); //检测是否成功读出每行数据
LogToFiles(strTemp,);
}
f.Close();
2018-11-02 新增笔记
昨天使用Open是因为不熟悉mode而浪费了时间,所以这里记录一下。
需求是文件如果存在则直接打开,文件如果不存在则新建。
一开始直接这样写的:
CString strPath, strReadLine;
TCHAR PathPro[256] = {0};
GetCurrentDirectoryW(256,PathPro); //PathPro :current path
strPath = CString(PathPro)+_T("\\") + FileName; //strPath :absolute path CStdioFile cfile;
cfile.Open(strPath,CFile::modeCreate|CFile::modeReadWrite);
while(cfile.ReadString(strReadLine))
{
...
}
效果是文件如果存在则直接清空,后来又认真看了一下每种mode的用法。
modeCreate:以新建方式打开,如果文件不存在,新建;如果文件已存在,把该文件长度置零,即清除文件原有内容。
modeNoTruncate:以追加方式打开,如果文件存在,打开并且不将文件长度置零,如果文件不存在,会抛出异常。一般与CFile::modeCreate一起使用,则文件不存在时,新建一个文件;存在就进行追加操作。
modeReadWrite:以读写方式打开文件。
modeRead:只读。
modeWrite:只写。
换成这种方式打开就不会有问题了。
cfile.Open(strPath,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite);
实现效果是文件如果不存在则新建,如果存在则不清空文件以读写方式打开。
使用 CFile 的子类 CStdioFile 的注意事项的更多相关文章
- CFile CStdioFile CArchive 文件操作之异同(详细)
两者的主要区别: 一. CFile类操作文件默认的是Binary模式,CStdioFile类操作文件默认的是Text模式. 在Binary模式下我们必须输入'\r\n',才能起到回车换行的效果, ...
- CFile、CStdioFile、FILE和其他文件操作(转+总结)
CFile.CStdioFile.FILE和其他文件操作(转+总结) 2010-04-10 20:36:33| 分类: VC++|举报|字号 订阅 下载LOFTER我的照片书 | ...
- CStdioFile
CStdioFile类的声明保存再afx.h头文件中. CStdioFile类继承自CFile类,CStdioFile对象表示一个用运行时的函数fopen打开的c运行时的流式文件.流式文件是被缓冲的, ...
- CStdioFile类学习笔记<转>
本文转自:http://www.cnblogs.com/JiMuStudio/archive/2011/07/17/2108496.html CStdioFile类的声明保存再afx.h头文件中. ...
- [转]VC++中对文件的写入和读取
本文转自:http://blog.csdn.net/fanghb_1984/article/details/7425705 本文介绍两种方法对文件进行读取和写入操作:1.采用fstream类:2.采用 ...
- MFC - 微软基础类库和框架
一 MFC的概念和作用 1 什么是MFC?? 全称 Microsoft Foundation Class Library我们称之为微软基础类库 1)从硬盘的存在形式上来说 MFC就是一个库(静/动态库 ...
- MFC类的结构
1. CObject类,MFC库中绝大部分类的基类,封装了MFC中的最基本机制. 运行时类信息机制/动态创建机制/序列化机制等... 2. CCmdtarget - 消息映射机制最基类 3. CWin ...
- 疯狂Android第二章:Adapter以及部分控件使用
第二章 重点:1.理解View以及各种布局的优缺点,适用场景. 2.熟练掌握adapter原理与用法. 3.熟悉其它控件的基本使用方法. /////////////////////////////// ...
- C++面向对象类的书写相关细节梳理
类的问题 继承类的原因:为了添加或者替换功能. 1. 继承时重写类的方法 v 替换功能 ① 将所有方法都设置为virtual(虚函数),以防万一. Virtual:经验表明最好将所有方法都设置为vir ...
随机推荐
- IDEA热部署自动重启服务问题
新接手项目过于庞大,从eclipse果断换成了IDEA.因为IDEA有免费的热部署,咳咳咳... 但是,手贱的我在下面这张状态下,直接OK了,TM,这不是我要的热部署啊,这是重新启动啊,但是勾选了do ...
- NFS服务及DHCPD服务
NFS 服务 Linux与Linux之间的文件共享 就是网络文件系统,依靠网络. 所有端口都存放在此,对应的服务跟端口 cat /etc/service 部署NFS 先部署服务器端: 部署之前要先启用 ...
- Jenkins+Maven+Jmeter接口自动化持续集成测试
在上一篇<利用xsltproc转换jtl报告到html报告>中,解决了html报告的问题.本篇主要还是利用Jenkins来做持续集成测试. Jenkins需要安装的插件 Maven Int ...
- Django之ORM跨表操作
Django之ORM表查询及添加记录 一.创建表 - 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-man ...
- UVaLive6443(线段树)
要点 题意--题意往往是个大坎Orz:输入操作 p 则在区间\([x_1,x_2]\)插入一个三次函数, t 则先查询区间\([x_1,x_2]\)的函数值的和,然后按题目要求得到新的\(x_1\). ...
- mybatis 日期比较
entity @JSONField(name="prj_date",ordinal=13,format="yyyy-MM-dd") private Date p ...
- 爬虫(cookie)——renren模拟登陆
工具:python3 步骤: 1)使用cookiejar.CookieJar()构建一个CookieJar()构建一个对象,用来保存cookie的值 2)使用HTTPCookieProcessor() ...
- C# 操作 sqlite
1.下载sqlite:http://system.data.sqlite.org/downloads/1.0.94.0/sqlite-netFx20-setup-bundle-x86-2005-1.0 ...
- IO流----File,递归,字节流,字符流
要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘.光盘.U盘等)上. 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作. 当把持久设备上的数据读 ...
- Hive的HQL(2)
Hive基础(1) Hive的HQL(2) 1. HQL的数据定义,HQL是一种SQL方言,支持绝大部分SQL-92标准.但是和SQL的差异为:不支持行级别的操作,不支持事务等.HQL的语法接近于My ...