CStdioFile不支持Duplicate、LockRange和UnlockRange CFile函数。如果在CStdioFile中调用这些函数,将会发生CNoSupported异常。
关于CStdioFile
CStdioFile继承自CFFILE,CStdioFile对象表示用运行时函数fopen打开的C运行时流文件。流式文件被缓冲,可以作为文本(默认)或二进制文件打开。文本为硬回车-换行符对提供了特殊的处理。当您将换行符(0x0A)写入基于文本的CStdioFile对象时,字节对(0x0D、0x0A)被发送到该文件。读取文件时,字节对(0x0D、0x0A)被转换为一个字节(0x0A)。
CStdioFile不支持Duplicate、LockRange和UnlockRange CFile函数。如果在CStdioFile中调用这些函数,将会发生CNoSupported异常。CStdioFile:read string(LPTSTR lpsz,UINT nMax);
将一行文本读入缓冲区,遇到“0x0D,0x0A”时停止读取,去掉硬回车“0x0D”,保留换行符“0x0A”,在字符串末尾加“ 0”(0x 00)。NMax字符包含0x00。
分析如下:
1)如果nMax=characters,读取(nMax-1) characters0x002)如果nMax=characters 1,读取nMax characters0x003)如果nMax characters,读取nmax characters0x0a00。CStdioFile:read string(CString rString);(重载)读取一行文本到rString,遇到回车换行符就停止读取。回车符和换行符不会读入rString,并且不会在末尾添加“ ”。CStdioFile:WriteString(LPCTSTR lpsz);(不支持CString直写)
将缓冲区中的数据写入与CStdioFile对象关联的文件。结束空字符(" ")不会写入该文件。lpsz中的所有换行符都作为硬回车换行符对写入文件,即“n”转换为“rn”写入文件。
CStdioFile是CFile的派生类,提供流文件的功能。函数void cstdiofile:writestring(lpctstr lpsz)写一个字符串,字符串lpsz的结尾需要用换行符标记“ r n”;函数boolcstdiofile:read string(cstringrstring)从文件中读取一行,如果文件没有读完则返回true,否则返回false。
比如:写入文件的例子
复制代码如下://创建文件CStdioFile文件;文件。Open(ts.txt ,CFile:mode create | CFile:mode write);//写入文件CString str海峡。格式( %srn , hello!“我在说一分钟!”);文件。Seek(0,CFile:end);文件。WriteString(str);//关闭文件file。close();比如:读文件的例子
复制代码代码如下:CString strText=CString szLine=//打开文件CStdioFile文件;文件。Open(ts.txt ,CFile:modeRead);//逐行读取字符串while(file . Read string(SZ line)){ strText=SZ line;} MessageBox(strText);//关闭文件file。close();CStdioFile类的声明保存在afx.h头文件中。CStdioFile类不支持CFile类中的Duplicate、LockRange和UnlockRange函数。如果您使用它们,您将得到一个CNotSupportedException类的错误。默认情况下,CStringFile类以文本模式操作文件。默认情况下,CFile类以二进制模式操作文件。这里大致说明一下二进制模式和Text模式的区别。二进制模式:
对于行尾,我们必须输入“rn”来表示回车和换行的效果。Text模式:
" r "回车是自动完成的,我们只需要写" n "。因此,当我们再次使用文本模式时,重要的是当我们从外部读取文件时,“rn”将被翻译为“n”,而当我们写入文件时,我们只需要提供“n”用于回车和换行,并且“rn”将被写入文件。M_pStream成员变量:打开文件的指针。构造函数:
CStdioFile();CStdioFile(FILE * popen stream);CStdioFile(LPCTSTR lpFileName,UINT nOpenFlags);throw(CFileException);FILE *pOpenStream:指C运行函数fopen调用后返回的文件指针。LPCTSTR lpFileName:指要打开的文件(绝对地址或相对地址)UINT nOpenFlags:指CFile类中描述的打开文件的方式。
虚拟LPTSTR ReadString(LPTSTR lpsz,UINT nMax);throw(CFileException);
如果使用此函数读取文本文件,当遇到“rn”时,停止读取,删除“r”,保留“n”并在字符串末尾添加“ ”。nMax的长度包含字符“ ”。
实际的分析如下:
如果nMax=字符数,读取(nMax-1)字符0x00;如果nMax=字符数1,则读取0x00nMax个字符;如果nMax字符数为,则读取nMax字符数0x0a(" n ")0x 00;如果文件有多行,当文件没有读完时,返回NOT NULL,当到达文件末尾时,返回NULL。BOOL read string(CString RS tring);throw(CFileException);
当一行文本读入rString时,回车和换行符停止读取,回车和换行符都不读入rString,末尾不加“0x00”。如果文件有多行,当文件没有结束时将返回TRUE,当到达文件末尾时返回FALSE。
虚拟void WriteString(LPTSTR lpsz);throw(CFileException);
将缓冲区中的数据写入与CStdioFile对象关联的文件。不支持CString类型数据的写入。完成的“ ”没有写入文件。lpsz缓冲区中的所有数据