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直接写⼊)
fopen和open区别将⼀个缓冲区中的数据写⼊与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 类默认的是按照⼆进制模式操作⽂件。
对于⼀⾏的结尾我们必须输⼊”\r\n”,才能表⽰回车换⾏的效果。
”\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缓冲区中的所有

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。