关于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缓冲区中的所有换行符被替换为回车换行符即”/n”转换为”/r/n”。

关于CStdioFile相关推荐

  1. CFile和CStdioFile的区别以及‘\r’、‘\r\n’

    转自:http://blog.csdn.net/davidhsing/archive/2007/08/26/1759494.aspx MSDN: Difference between text mod ...

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

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

  3. CStdioFile读写文件的问题

    该注意的地方: 1.读文件操作中的file和path均在CXXApp类中定义,需要在CXXView中使用,我采用的方法是获取theApp对象,从而使用其中定义的file和path变量.在CXXView ...

  4. CStdioFile写文件中出现的问题

    被一个bug纠缠了两天,今天总算找到问题在哪里了: //创建学生端存放考试结果文件夹  CString strFolderPath = "C://";  strFolderPath ...

  5. CFile和CStdioFile的文件读写使用方法

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

  6. MFC - CStdioFile 读取txt文件UNICODE 中文异常

    MFC - CStdioFile 读取txt文件UNICODE 中文异常 参考文章: (1)MFC - CStdioFile 读取txt文件UNICODE 中文异常 (2)https://www.cn ...

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

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

  8. 使用CStdioFile操作文件

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

  9. CStdioFile类学习

    CStdioFile 类学习笔记 2007-7-17 CStdioFile 类的声明保存再 afx.h 头文件中. CStdioFile 类继承自 CFile 类, CStdioFile 对象表示一个 ...

  10. CStdioFile类

    参数内容: 第一个参数为路径+文件名,最后一个为错误出现的结构. 现在解释下第二个参数 CFile::modeCreate   Directs the constructor to create a ...

最新文章

  1. Xilinx Axi Dma Userspace模式下 寄存器 +MMAP 测试程序
  2. Cassandra - Insert after Delete fails silently
  3. win7右键点击文件夹进入命令窗口方法
  4. 计算2的N次方(信息学奥赛一本通-T1170)
  5. python-计算机二级考试-报考笔记
  6. webpack快速入门教程
  7. java批量查询导致堆内存不足,带有嵌套聚合的Elasticsearch查询导致内存不足
  8. 使用JRebel进行Java Web项目的热部署
  9. Use Jet OLE DB Provider 4.0 to Connect to ISAM Databases (连接Excel, Text等数据库)
  10. Lidar Studio点云处理与分析软件V1.1
  11. 关于MyDockFinder
  12. 手工焊锡通用工艺规程
  13. matlab 音频fftshift,matlab使用杂谈5-fftshift函数的使用
  14. 你努力工作会让老板感动吗?
  15. MySQL压缩包下载及解压安装
  16. PMP计算题笔记(净现值、投资回收期、PERT、总价加激励、成本加激励)
  17. 让男生成熟的十部电影zt
  18. 造成BGA焊接不良问题有哪些?
  19. 鼠标滚动调整图片大小(css3 zoom 放大缩小)
  20. 如何设计动态股权分配方案

热门文章

  1. 希尔伯特(hilbert)矩阵与最小二乘法
  2. 博通wifi驱动详解(四)
  3. OK资本周子涵:区块链的成果是“熬”出来的
  4. :hover的几种选择用法
  5. php数组合并多维,PHP合并多维数组
  6. dhl软件_DHL的完整形式是什么?
  7. FPGA基础----TLP包格式以及组包方法(1)
  8. JsonCpp库遍历
  9. java中的pojo是什么意思
  10. rdesktop远程使用Windows的一些技巧