转载:https://wenku.baidu.com/view/301e361827284b73f2425099.html

CStdioFile 不支持Duplicate,LockRange,和UnlockRange 这几个CFile 函数。如果在CStdioFile 中调用了这几个函数,将会出现CNoSupported 异常

关于CStdioFile
CStdioFile继承自CFile,一个CStdioFile对象代表一个用运行时函数fopen 打开的C 运行时流式文件。流式文件是被缓冲的,而且可以以文本方式(缺省)或二进制方式打开。文本方式提供对硬回车—换行符对的特殊处理。当你将一个换行符(0x0A)写入一个文本方式的CStdioFile 对象时,字节对(0x0D,0x0A)被发送给该文件。当你读一个文件时,字节对(0x0D,0x0A)被翻译为一个字节(0x0A)。

CStdioFile不支持Duplicate,LockRange,和UnlockRange 这几个CFile 函数。如果在

CStdioFile中调用了这几个函数,将会出现CNoSupported 异常。
CStdioFile::ReadString(LPTSTR lpsz, UINT nMax);

读取一行文本到缓冲区,遇到“0x0D,0x0A”时停止读取,并且去掉硬回车“0x0D”,保留换行符“0x0A”,在字符串末尾添加“\0”(0x00)。nMax个字符里包含0x00这个字符。

分析如下:
1)如果nMax <= 字符数,读取(nMax-1)个字符 + 0x00
2)如果nMax = 字符数 + 1,读取nMax个字符 + 0x00
3)如果nMax > 字符数,读取nMax个字符 + 0x0A + 0x00

CStdioFile::ReadString(CString&rString);(重载)
读取一行文本到rString,遇到回车换行符停止读取。回车和换行符不读到rString,而且末尾也没有添加“\0”。
CStdioFile::WriteString( LPCTSTR lpsz );(不支持CString直接写入)

将一个缓冲区中的数据写入与CStdioFile 对象关联的文件中。结束的空字符(“\0”)不被写入该文件。lpsz 中的所有换行符都被以一个硬回车换行符对写入该文件,即“\n”被转化成“\r\n”写入到文件里。

CFile的派生类CStdioFile提供了对文件进行流式的操作功能。其中函数void CStdioFile::WriteString( LPCTSTR lpsz )写入一个字符串,需要给字符串lpsz的末尾加上换行标志”\r\n”;函数bool CStdioFile::ReadString(CString &rString )从文件中读取一行,如果文件未读完返回true,否则返回false。

比如:写入文件的例子

代码如下:
//创建文件
CStdioFile file;
file.Open("ts.txt",CFile::modeCreate|CFile::modeWrite);
//写入文件
CString str;
str.Format("%s\r\n","hello! I am talkingmute!");
file.Seek(0, CFile::end);
file.WriteString( str );
//关闭文件
file.Close();

比如:读文件的例子

代码如下:
CString strText = “”;
CString szLine = “”;
//打开文件
CStdioFile file;
file.Open("ts.txt",CFile::modeRead);
//逐行读取字符串
while( file.ReadString( szLine ) )
{
   strText += szLine;
}
MessageBox(strText);
//关闭文件
file.Close();

CStdioFile类的声明保存在afx.h头文件中。
CStdioFile类不支持CFile类中的Duplicate、LockRange、UnlockRange函数,如果你使用了,会得到CNotSupportedException类的错误。
CStringFile类默认的是按照Text模式操作文件。

CFile 类默认的是按照二进制模式操作文件。

这里大致说明一下二进制模式和Text模式的区别。
二进制模式:
对于一行的结尾我们必须输入”\r\n”,才能表示回车换行的效果。
Text模式:”\r”回车的工作是自动完成的,我们只需要写入”\n”即可。所以我们再使用文本模式时要注意,当我们从外部读入文件时,”\r\n”会被翻译成”\n”,写入文件时,我们对于回车换行只需提供”\n”,即可,”\r\n”会被写入到文件中。
m_pStream成员变量:打开文件的指针。

构造函数:
CStdioFile();
CStdioFile(FILE *pOpenStream);
CStdioFile(LPCTSTR lpFileName, UINT nOpenFlags);
throw(CFileException);

FILE *pOpenStream:指的是c运行函数fopen调用后返回的文件指针。
LPCTSTR lpFileName:指的是被打开的文件(绝对地址或相对地址)
UINT nOpenFlags:指的是CFile类中所描述的打开文件的方式。

virtual LPTSTR ReadString(LPTSTR lpsz, UINT nMax);
throw(CFileException);

如果使用该函数读取文本文件,当遇到”\r\n”,停止读取,并去掉”\r”,保留”\n”,并在字符串尾部增加”\0”,nMax的长度包含有”\0”字符,

实际的分析如下:
如果nMax <= 字符数,读取(nMax-1)个字符+0x00;
如果nMax = 字符数 + 1,读取nMax个字符+0x00;
如果nMax > 字符数,读取nMax个字符+0x0A(”\n”) + 0x00;
如果文件有多行,则当文件没有读完时,返回NOT NULL,读到文件尾,返回NULL。

BOOL ReadString(CString& rString);
throw(CFileException);

读取一行文本到rString中,遇到回车换行符停止读取,回车和换行符均不读到rString中,尾部也不添加”0x00”。
如果文件有多行,则当文件没有读完时,返回TRUE,读到文件尾,返回FALSE。

virtual void WriteString(LPTSTR lpsz);
throw(CFileException);

将缓冲区中的数据写入到与CStdioFile对象相关联的文件中,不支持CString类型数据写入,结束的”\0”不被写入到文件中,lpsz缓冲区中的所有

CStdioFile的用法详细解析相关推荐

  1. WPS和Word段落文字5种对齐方式的功能、区别和用法详细解析

    在WPS文字和Word文档中,段落中的文字对齐方式共有五种,分别是:左对齐.居中.右对齐.两端对齐.分散对齐. 这五种对齐方式分别实现了什么对齐效果?他们的区别是什么?在什么时候使用哪种对齐方式呢?能 ...

  2. 【贪玩巴斯】带你学:C++ tips ——知识点:string::npos 用法详细解析 , 看这一篇就够了 2021年12月21日

    [贪玩巴斯]带你学:C++ tips --知识点:string::npos 用法详细解析 !!! 一.定义 二.使用 1.如果作为一个返回值(return value)表示没有找到匹配项 2.但是st ...

  3. Stream.reduce()用法详细解析

    在学习这个函数的用法之前,我们要先知道这个函数参数的意义 基本使用 先举一个简单的例子: 算法题:Words 题目描述 每个句子由多个单词组成,句子中的每个单词的长度都可能不一样,我们假设每个单词的长 ...

  4. c 语言 可变参数前要加形参,C/C++中可变参数的用法详细解析

    可变参数即表示参数个数可以变化,可多可少,也表示参数的类型也可以变化,可以是int,double还可以是char*,类,结构体等等.可变参数是实现printf(),sprintf()等函数的关键之处, ...

  5. 原生js html insert,js中AppendChild与insertBefore的用法详细解析

    appendChild定义appendChild(newChild: Node) : Node Appends a node to the childNodes array for the node. ...

  6. C++中函数模板的用法详细解析

    所谓函数模板实际上是建立一个通用函数,其涵涵素类型额形参类型不具体指定,用一个虚拟的类型来代表,这个通用函数就称为函数模板 定义 我们知道函数的重载可以实现一个函数名多用,将功能相同或者类似函数用同一 ...

  7. $.cookie( ) 用法详细解析

    Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是 ...

  8. mysql limit 01怎么理解_MySQL limit实际用法的详细解析

    MySQLlimit的实际用法的详细解析,在我们使用相关的查询语句的时候,一般都要返回前几条或是中间的某几行数据,这时你应如何处理呢?不必担心,MySQL数据库已经为我们提供了这样一个功能. SELE ...

  9. [网络安全自学篇] 六十一.PE文件逆向之数字签名详细解析及Signcode、PEView、010Editor、Asn1View等工具用法(二)

    本系列虽然叫"网络安全自学篇",但由于系统安全.软件安全与网络安全息息相关,作者同样会分享一些系统安全案例及基础工具用法,也是记录自己的成长史,希望大家喜欢,一起进步.前文 &qu ...

最新文章

  1. socket心跳检测
  2. Spring 创建对象的问题,不同构造方法创建对象,使用工厂类类获取对象、单例或多例、延迟创建问题
  3. learning ddr pagesize calculate
  4. 各种编程语言的按钮输入框
  5. 线性代数二之矩阵加速DP——数学作业,Arc of Dream
  6. (王道408考研数据结构)第六章图-第四节5:最短路径之弗洛伊德算法(思想、代码、演示、答题规范)
  7. 小程序 | 微信小程序二级选择器
  8. adapter对象的更新操作
  9. 【kafka】kafka 2.3 关于控制Broker端入站连接数的讨论
  10. ReactNative绑定函数中的this
  11. Oracle八大性能视图之v$transaction
  12. 解决Admob Banner首次展示不显示的问题
  13. 摄像头YUV2格式详解
  14. [leetcode]5341. 最后 K 个数的乘积
  15. java 设计模式 示例_Java示例中的装饰器设计模式
  16. Java面试题:热情盛夏,分享Java大厂面试百题
  17. html基础—页面框架,前端基础——页面架构
  18. 爬虫进阶:CrawlSpider爬取169ee全站美女图片
  19. .pth.tar文件
  20. win10安装序列号

热门文章

  1. MediaCodec硬解流程
  2. 【JavaScript创建数组】
  3. 手机双频GNSS+RTKLIB解算定位分析
  4. 梦幻模拟战 服务器维护,《梦幻模拟战》3月24日更新维护公告
  5. (starGAN)StarGAN: Unified Generative Adversarial Networksfor Multi-Domain Image-to-Image Translatio
  6. 搜索三大定律,[出自搜索引擎直通车]
  7. spring框架巨巨巨巨详细
  8. 非涉密计算机网检平台,非涉密计算机检查记录表-保密处.pdf
  9. 罗技K375s如何切换通道
  10. plc编程和计算机编程语言,以S7-300为例谈可编程控制器的编程语言和程序结构