第11章 文件处理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
virtual UINT Read( void* lpBuf, UINT nCount );
DWORD ReadHuge( void* lpBuffer, DWORD dwCount ); virtual void Write( const void* lpBuf, UINT nCount ); void WriteHuge( const void* lpBuf, DWORD dwCount ); virtual LONG Seek( LONG lOff, UINT nFrom ); void SeekToBegin(); DWORD SeekToEnd(); virtual DWORD GetLength() const; virtual void SetLength( DWORD dwNewLen ); virtual DWORD GetPosition() const; virtual CString GetFileName() const; static void PASCAL Rename( LPCTSTR lpszOldName, LPCTSTR lpszNewName ); static void PASCAL Remove( LPCTSTR lpszFileName );
【示例11.1】
• 将1~10这10个整数输入到文件中。新建一个控制台应用程序,编写代
码如下:
• 程序运行后,屏幕上并不显示任何内容,因为输出的内容保存在文件中。
打开当前目录下的文件num,可以看到文件中的内容如下:
• 12345678910
• 上面的例子是先建立一个输出文件,然后写入数据,最后关闭文件。可 以看到文件中已保存了输出的内容。
• abcde
• 本节介绍了在Visual C++中进行文件操作的基本函数和过程。在MFC中
对这些操作以C++类的形式进行了封装,使得文件的操作更加简单和方 便。在11.2节中将会看到使用MFC封装的文件类进行文件操作的基本方
法和过程。
11.2 CFile类
• 在MFC中利用C++类的形式封装了对各种各样的文件的操作。其中CFile
间小,因此在程序中经常用来保存一些中间结果,这些内容有时需要再次
送入内存。 • 在C++中要进行文件的输入输出,需要首先创建一个流,然后将这个流与 文件相关联,即打开文件。这时就可以对文件进行操作,操作完成后关闭 文件。
11.1.2 文件的打开与关 闭
• 在利用Visual C++进行文件操作之前都需要首先打开文件。打开文件之
数如表11.3所示。
表11.3 CFile的主要成员
函 数 CFile( LPCTSTR lpszFileName, UINT nOpenFlags ); 构造函数 说 明 virtual BOOL Open( LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = 打开文件 NULL ); virtual void Close(); 关闭文件
简单的事情。本节介绍C++中文件的输入输出操作的基本知识。
11.1.1 C++对文件操作 的支持
• C++把文件看做是字符序列,也就是说文件是由一个个字符数据顺序组成
的。根据数据的组织形式,文件分为文本文件和二进制文件。文本文件的 每个字节存放一个ASCII码,代表一个字符。二进制文件则是把内存中的数 据,按其在内存中的样子写到磁盘中。 • 文本文件是每个字节存放一个ASCII,即一个字节对应于一个字符,这样可 以很方便地进行操作,而二进制文件并不是每一个字节都对应一个字符, 因此不可以以字符形式直接进行输出。但是二进制文件比文本文件占用空
类是文件操作的基类,提供了对普通文件进行的操作。
11.2.1 初识CFFra Baidu bibliotekle类
•
• • • •
在MFC中利用C++类的形式封装了对各种各样的文件的操作。常见的类有
下面几种。 CFile:文件类的基类,封装了二进制磁盘文件的操作。 CStdioFile:封装了对缓冲流文件的操作。 CMemFile:封装了对内存文件的操作。 CShareFile:封装了对共享内存文件的操作。
11.1.3 文本文件的输入 和输出
• 在打开文件以后,就可以对文件进行输入操作,即写操作。使用运算符
“<<”,就可以将内容输入到文件。在C++中对屏幕的输出使用的是 cout<<,而此时使用的是与文件关联起来的流对象。对文件的读操作正
好与写操作相反,它使用的运算符为“>>”,其他的含义是完全相同的。
读入nCount字节大小的内容
读入dwCount字节大小的内容 写入nCount字节大小的内容 写入dwCount字节大小的内容 定位到指定位置的nFrom处 定位到文件头 定位到文件尾 得到文件大小 设置文件大小 得到文件指针的位置 得到文件名 修改文件名 删除文件
• 使用CFile类可以方便地进行文件操作,其中文件操作中需要首先打开
文件,文件的打开方式是一个需要注意的问题。Open函数中参数 nOpenFlags的常用取值为以下的一个或几个。
• CFile::modeCreate:打开文件时,如果文件不存在则新建一个文件。
• CFile::modeNoTruncate:普通方式打开文件。 • CFile::modeRead:只读方式打开文件。 • CFile::modeReadWrite:文件可读可写。 • CFile::modeWrite:只写方式打开文件。
这个函数参数的意义和read()函数的参数的意义完全相同,只不过这个函数是将数据写入 文件。
【示例11.2】
• 将存放'a'到'e'的5个字符的数组写入文件。新建一个控制台应用程序,
编写代码如下:
• 分析:程序运行后,屏幕上并不显示任何内容,因为输出的内容保存在
文件中,打开当前目录下的文件num,可以看到文件中的内容如下:
后才可以对文件进行操作,当操作结束时还需要关闭文件。下面对文件 打开和关闭的基本过程进行介绍。
1.文件的打开
• 在C++中文件的打开实际上就是将文件与一个流对象关联起来,C++提
供了3个标准的流类,3个流类列表如表11.1所示。
表11.1 C++的流类
名 称
基 类
作 用
ofstream
ostream
图11.1 运行结果
• 上面的编辑框2中显示的是文件中的所有内容,在当前文件夹下可以找
到“test.txt”文件,以记事本形式打开,可以看到里面内容如下:
• 这是第一次输入这是第二次输入下面进行第三次输入好了,任务完成了
• 本节介绍了使用MFC中封装的文件类进行文件操作的基本方法和步骤。
文件的输出
ifstream
istream
文件的输入
fstream
iostream
文件的输入或输出
• 在C++中,文件的打开一般需要进行下面几步:
• (1)建立流对象。C++提供了3个标准的输入输出流,可以利用这些流 类建立需要的对象。
• (2)使用流类的成员函数open()打开文件。其原型如下:
• void open( const char* szName, int nMode, int nProt = filebuf::openprot );
1.get()和put()函数的使 用
• get()是输入流类istream的成员函数,它可以从流对象连接的文件中读出数
据,每次读取一个字节。put()是输出流类ostream的成员函数,它可以向流 对象连接的文件写入数据。 • • • • • get()和put()函数的原型如下:
istream& get( unsigned char& ruch );
即nMode的取值有多个,需要用“|”连接起来,这样就可以以多种方式
打开文件。 • 注意:在Visual C++中使用C++的标准流类,需要包含头文件
iostream.h。
2.文件的关闭
• 在对文件的输入输出完成以后,需要关闭文件,即取消流对象和文件之
间的关联。文件的关闭需要使用close()函数。close()是流类的成员函数, 它的使用非常简单,没有参数,也没有返回值。
•
• •
这个函数的第一个参数是块数据的首字节地址,第二个参数是读入的字节数。
ostream& write( const char* pch, int nCount ); ostream& write( const unsigned char* puch, int nCount );
•
•
ostream& write( const signed char* psch, int nCount );
每次读入一个字节,并且放入rush中。 ostream& put( char ch );
将字符ch写入到文件中。
2.read()和write()函数的使用
• • • • read()和write()函数可以用来读写一个块数据,即可以读写结构体、数组等。其原型如下:
istream& read( char* pch, int nCount ); istream& read( unsigned char* puch, int nCount ); istream& read( signed char* psch, int nCount );
第11章 文件处理
• 在Windows中,各种数据及信息都存储在文件中。因此在Windows下的
程序一般情况下都需要对文件进行数据的存储和读取。学习本章,读者 可以掌握C++程序文件输入输出的基本方法,以及利用MFC中的CFile类
对文件进行操作的基本方法。
11.1 文件的输入输出
• 文件的输入输出是文件的基本操作。在C++中,文件的输入输出是十分
•
• •
COleStreamFile:封装了使用COMM Istream接口对复合文件的操作。
CSocketFile:封装了对Windows Socket提供的操作。 说明:CFile类是CObject的派生类,因此它支持串行化操作。在应用中可
以使用串行化操作保存文件。
• CFile类是文件类的基类,它封装了对磁盘文件进行的操作,其成员函
• 各个参数的含义分别为:szName表示文件名。nMode表示打开方式,它
的取值为表11.2的一个或者几个。
表11.2 nMode的取值及其含义
nMode的取值 ios::app ios::ate ios::in 输出追加到文件尾 查找文件尾 打开文件进行读操作 说 明
ios::nocreate
• (2)在资源编辑环境中添加两个编辑框和一个按钮控件。
• (3)添加单击按钮控件的消息映射,编写函数体如下:
• 分析:上面代码首先将编辑框1里面的内容保存在文件的末尾,然后将 文件里面的所有内容读出来,显示在编辑框2里面。 • 提示:应预先建立test.txt文件。 • (4)编译、连接,运行结果如图11.1所示。
11.2.2 使用CFile类
• 前面介绍了CFile类的基本成员,下面结合实例对CFile类的使用进行介
绍。
【示例11.3】
• 在对话框中利用CFile类实现保存在编辑框中输入的内容,单击“显示”
按钮后,在文件中保存该内容,并且在另一个对话框中输出文件的所有 内容。操作步骤如下:
• (1)新建一个基于对话框的应用程序。
ios::noreplace ios::out ios::trunc ios::binary
文件不存在,则打开失败
文件存在,打开失败 打开文件进行写操作 删除文件后重新新建文件 文件以二进制形式打开
• 需要注意的是当利用此open()函数打开的文件不存在时,应用程序会新 建一个文件,然后再进行打开。当需要以一种以上的方式打开文件时,
11.1.4 二进制文件的输 入和输出
• 任何文件都可以以二进制形式打开,文本文件是字符流,而二进制文件
是字节流。 • 在默认情况下,文件的打开方式是以文本文件的形式。如果需要指定以
二进制文件打开文件,只需要在open()函数时指定方式为ios::binary方式。
• 对二进制文件的读写有两种方式,一种是使用get()和put()函数,另一种 是使用read()和write()函数。这四个函数也可以用于文本文件的读写,其 使用方式与二进制文件的使用区别不大。