📄 12.2.2 文件的写入.txt
字号:
12.2.2 文件的写入
在C语言中,向文件中写入数据可以利用fwrite函数实现,该函数的声明形式如下所述:
size_t fwrite ( const void *buffer, size_t size, size_t countTFILE *strean);
fwrite函数有四个参数,各自的含义分别如下所述:
. buffer
指向将要被写入文件的数据.
. size
以字节为单位的项的大小。类型是size_t,实际上就是unsignedinteger类型。
. count
将要被写入的项的最大数目。
为了更清楚地说明size和count这两个参数的含义,我们举例来说明,例如现在要写入6个字符的数
据,如果将size参数设置为1个字节,那么这时需要写入6个字节,也就是说需要将 count参数设置
为 6,才能将 6个字符写入到文件中;如果将项的大小 (size参数)设置为2,则只需要写入3次(即把
count参数设置为3)即可写入所有6个字节的数据。一般来说,主要是在向文件中写入一些整型数据
的时候,需要注意这两个参数的使用。例如定义了一个整型数组,就可以将项的大小 (size)设置为
4个字节,因为一个整型占据4个字节。如果该整型数组中有5个元素,就可以将count设置为5,这样
一次fwrite调用就可以把这个整型数组中的所有元素完整地写入到文件中:如果此时将Sm参数设置
为1,而将count参数设置为5的话,就不能把该整型数组中的所有元素完全写入到文件中。
. stream
指向FILE类型的指针,该指针可以通过fopen函数获取到。因此,在File程序的CFileView类的
OnFileWrite函数中添加如例 12-1所示代码,从而利用C语言提供的函数实现文件的写入操作。
例 12-1
void CFileView::OnFileWrite()
{
FILE *pFile=fopen ("n1. txt" , "w") ;
fwrite ( ''http://www. sunxin.org", 1 , strlen (..http : //www . sunxin.org..),pF ile) ;
在如例 12-1所示代码中,首先利用fopen函数打开文件: 1.txt,打开方式为 "w飞即为写入操作而
打开该文件。接下来,调用fwrite函数向该文件中写入数据,至于数据的大小,可以利用strlen函
数得到。具体代码如例 12-2所示。
例 12-2
void CFileView: :OnFileWrite()
// TODO : Add your command handler code here
FILE *pFile=fopen("l . txt ", "w") ;
fwri te ( " http: //www . sunxin. org" , 1, strlen (..http: //www . sunxin . org..).pFile) ;
Build井运行File程序,并在单击【文件操作\写入文件】菜单项之后,在File工程所在目录下就可
以看到多了一个文件: 1.txt,但是将其打开之后,将会发现这个文件中没有任何内容。接下来,我
们关闭正运行的File程序,再次打开l.txt文件,这时就可以看到该文件中有内容了,就是我们在程
序中写入的数据: http://www.sunxin.org,如图 12.3所示。
图 12.3利用C语言实现的文件写入操作后的结果
那么为什么会出现这种情况呢?这是因为C语言对文件的操作使用了缓冲文件系统,具体地说就是系
统自动为每个正在使用的文件在内存中开辟了一块缓冲区域,从内存向磁盘文件写入的数据必须先
送到内存中的这个缓冲区,直到该缓冲区装满之后,才把其中的数据一起送到磁盘上的文件中。因
为我们刚才在运行File程序时,数据实际上是写到这个文件缓冲区中,而这个文件缓冲区并没有满,
所以就没有写入磁盘文件中。这样我们打开该文件时没有看到数据。而当我们关闭File程序后,这
时系统就会将缓冲区中的数据写入到磁盘上的文件中,因此就可以看到该文件中有内容了。同样地,
如果是从磁盘文件向内存中读取数据,其过程首先是将一批数据读入内存中的缓冲区,当该缓冲区
满了之后,再将数据从该缓冲区逐个送到程序的数据区中。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -