iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >CStdioFile的用法详细解析
  • 711
分享到

CStdioFile的用法详细解析

CStdioFile 2022-11-15 22:11:55 711人浏览 薄情痞子
摘要

关于CStdioFileCStdioFile继承自CFile,一个CStdioFile 对象代表一个用运行时函数fopen 打开的C 运行时流式文件。 流式文件是被缓冲的,而且可以以

关于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缓冲区中的所有

--结束END--

本文标题: CStdioFile的用法详细解析

本文链接: https://www.lsjlt.com/news/172560.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • CStdioFile的用法详细解析
    关于CStdioFileCStdioFile继承自CFile,一个CStdioFile 对象代表一个用运行时函数fopen 打开的C 运行时流式文件。 流式文件是被缓冲的,而且可以以...
    99+
    2022-11-15
    CStdioFile
  • c_str()的用法详细解析
    const char *c_str();c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同. c_str()就是把string类对象转换成和c兼容的cha...
    99+
    2022-11-15
    c_str
  • CFile与CStdioFile的文件读写使用方法详解
    CFile//创建/打开文件CFile file;file.Open(_T("test.txt"),CFile::modeCreate|CFile::modeNoTruncate|C...
    99+
    2022-11-15
    CFile CStdioFile
  • Java Stream.reduce()用法详细解析
    目录基本使用额外举例并行读流处理异常复杂对象的处理总结在学习这个函数的用法之前,我们要先知道这个函数参数的意义 基本使用 先举一个简单的例子: 算法题:Words题目描述每个句子由多...
    99+
    2022-12-14
    stream reduce用法 stream的reduce方法 java stream reduce方法
  • STL list链表的用法详细解析
    本文以List容器为例子,介绍了STL的基本内容,从容器到迭代器,再到普通函数,而且例子丰富,通俗易懂。不失为STL的入门文章,新手不容错过!0 前言1 定义一个list2 使用li...
    99+
    2022-11-15
    STL 链表
  • c++中new的三种用法详细解析
    一. 简介new有三种使用方式:plain new,nothrow new和placement new。(1)plain new顾名思义就是普通的new,就是我们惯常使用的new。在...
    99+
    2022-11-15
    new c++
  • PHP 函数的调用方法详细解析
    php 函数调用方法:遵循语法:function_name(argument1, argument2, ..., argumentn)参数传递:可通过值传递或引用传递引用传递方式:通过局...
    99+
    2024-04-16
    php 函数调用
  • PHP中success方法的详细解析
    PHP中success方法的详细解析 在PHP编程中,成功处理返回结果时经常会用到success方法。success方法通常用于表示执行成功并返回相应的数据,它是一种简洁而有效的处理成...
    99+
    2024-04-02
  • pandaslocilocix用法详细分析
    目录1.什么是label2.loc用法2.1 选择行2.2 选择列2.3 选择指定的行列2.4 loc小结3.iloc用法4.ix1.什么是label pandas处理数据时,我们会...
    99+
    2023-01-09
    pandas loc iloc ix用法 pandas iloc用法 pandas loc iloc ix
  • PHP中POST方法的详细解析
    PHP中POST方法的详细解析 在PHP编程中,POST方法是一种用于向服务器发送数据的HTTP请求方法。通过POST方法,我们可以将表单中的数据提交给服务器,服务器接收到数据后进行处...
    99+
    2024-04-02
  • C语言中extern详细用法解析
    在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。  1. extern修饰变量的声明。  举例来...
    99+
    2024-04-02
  • VC中Tab control控件的用法详细解析
    1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后Finish. 2. 删除对话框上默认添加的三个控件. 添加Tab Control控件并在Prope...
    99+
    2022-11-15
    Tab_control控件
  • log4j使用详细解析
    简单的说log4j就是帮助开发人员进行日志输出管理的API类库。它最重要的特点就可以配置文件灵活的设置日志信息的优先级、日志信息的输出目的地、日志信息的输出格式Log4j 除了可以记录程序运行日志信息外还有一重要的功能就是用来显示调试信息。...
    99+
    2023-05-31
    log4j 用法
  • STl中的排序算法详细解析
    1. 所有STL sort算法函数的名字列表: 函数名             功能描述 sort          对给定区间所有元素进行...
    99+
    2022-11-15
    STl 排序算法
  • window.history详细解析
    window.history是JavaScript中的一个对象,表示浏览器的历史记录。它提供了一些方法和属性,允许开发人员在浏览器历...
    99+
    2023-09-13
    解析
  • Java详细讲解分析双指针法的使用
    目录前言1.判断链表是否有环2.查找链表中间的元素3.奇偶排序前奇后偶4.删除排序链表的重复元素5.三数之和6.分割链表7.合并两个有序的数组8.两数之和—输入有序数组9...
    99+
    2024-04-02
  • c语言中static和extern的用法详细解析
    一,static和extern:大工程下我们会碰到很多源文档。文档a.c复制代码 代码如下:static int i; //只在a文档中用int j;  &nbs...
    99+
    2022-11-15
    c语言 extern static
  • C/C++中可变参数的用法详细解析
    可变参数即表示参数个数可以变化,可多可少,也表示参数的类型也可以变化,可以是int,double还可以是char*,类,结构体等等。可变参数是实现printf(),sprintf()...
    99+
    2022-11-15
    C 可变参数
  • C++ 函数声明的详细语法:从语法解析到规范用法解析
    c++++函数声明语法为:returntype functionname(parametertype1 parametername1, ... , parametertypen para...
    99+
    2024-04-30
    c++ 函数声明 编译错误
  • do...while(0)的妙用详细解析
    在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视...
    99+
    2022-11-15
    do_while
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作