【C解析之七】文件进阶

C解析之七文件进阶

      前言:记忆如何写入文件,如何从文件中提取记忆
           文件的读/写是最常用的文件操作,C语言标准函数库提供了多种文件读写函数,分别在字符字符串数据块三个层面上的读写操作,适应不同的文件读写需求。
           1.字符读写函数:
                   1.1读字符函数fgetc,从指定文件中读取一个字符,助记符为(file+get+char)。
  •                          用法:fgetc(FILE *filepoint)
  •                          返回值:fgetc的返回值是从文件读取到的字符:如果读到文件末尾,之返回EOF(end of file)。
  •                          自动后移:文件内部有一个位置指针,指向当前读取的字节,fgetc后该指针会自动往后移 动 便可以依次读取字符。
                   1.2.写字符函数fputc,往指定文件内写入一个字符,助记符为(file+input+char)。
  •                         用法:fputc(int ch,FILE *filepoint)
  •                         返回值:fputc的返回值是写入文件的字符:如果发生错误则返回EOF(end of file)。
  •                         自动后移:fputc每次写入一个字符,文件内部的位置指针都会往后移动一个字节。
下面是一个很好的例子,键盘的输入持续的输入(换行键结束)写入E盘下file1.txt文件,并将文件的内容输出到屏幕上:
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
            
            
#include<stdio.h>
int main (){
FILE * filepoint ;
char ch ;
//写方式打开一个文件,并验证文件是否正确打开
filepoint = fopen ( "E://file1.txt" , "w" );
if ( filepoint == NULL ){
printf ( " \n Open file failed !" );
return 1 ;
}
//写入文件
ch = getchar (); //获取键盘输入的字符
while ( ch != '\n' ){ //不为换行则继续输入
fputc ( ch , filepoint );
ch = getchar ();
}
fclose ( filepoint );
//读方式打开一个文件,并验证文件是否正确打开
filepoint = fopen ( "E://file1.txt" , "r" );
if ( filepoint == NULL ){
printf ( " \n Open file failed !" );
return 1 ;
}
//读取文件
ch = fgetc ( filepoint );
while ( ch != EOF ) //是否到文件末尾
{
putchar ( ch ); //向屏幕输出字符
ch = fgetc ( filepoint );
}
fclose ( filepoint );
return 0 ;
}
 来自CODE的代码片
charfile.c
           2.字符串读写函数:
                     2.1读字符串函数fgets,从文件中读取指定长度字符到字符串变量中,助记符为(file get strings)。
  •                          用法:fgets(char * string,int nunber,FILE * filepoint)
  •                          返回值:返回文件中读出的字符串。
  •                          number:只能读取出number-1个字符,最后一个位置需要放入'\0'结束标志。
                     2.2 写字符串函数fputs,往指定文件写入一个字符串,助记符为(file input strings)
  •                          用法:fputs(char *string,FILE * filepoint)
  •                          返回值:写入成功返回非负值:发生错误则返回EOF.
           3.数据块读写函数:数据块读写函数能将结构体,数组等大块的数据写入文件,直接将内存若干字节的数据写入文件。
                     3.1写数据函数fwrite:fwrite(void *p,int size,int items,FILE *filepoint)
  •                          p:数据的地址                     
  •                          size:每个数据的长度
  •                          items:数据的个数
  •                          返回值:写入成功返回数据个数items:错误时返回小于items.
                      3.2读数据块函数fread:fread(void *p,int size,int items,FILE *filepoint)
  •                          p:读出数据存放地址
  •                          size:每个数据的长度
  •                          items:需要读出的数据个数
  •                          返回值:成功返回读取数据个数items:错误时返回小与items.
下面的示例,存储数据块到E盘下file2.txt,让后读取出来显示在屏幕上:
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
            
            
#include<stdio.h>
//定义结构体并初始化
struct person
{
char name [ 20 ];
char Phone [ 15 ];
char age [ 5 ];
} Myperson [ 3 ] =
{
{ "小明" , "13611112222" , "21" },
{ "小华" , "13511112222" , "23" },
{ "小强" , "13811112222" , "30" }
};
int main (){
struct person P [ 3 ]; //创建P数组用来接受读出的数据
FILE * filepoint ;
filepoint = fopen ( "E://file2.txt" , "w" ); //写入方式
if ( filepoint == NULL )
{
printf ( " \n Open file failed !" );
return 1 ;
}
//写入文件
fwrite ( Myperson , sizeof ( struct person ), 3 , filepoint );
fclose ( filepoint );
//读取文件
filepoint = fopen ( "E://file2.txt" , "r" ); //读取方式
if ( filepoint == NULL )
{
printf ( " \n Open file failed !" );
return 1 ;
}
fread ( P , sizeof ( struct person ), 3 , filepoint );
printf ( " \n %s %s %s" , & P [ 0 ]. name , & P [ 0 ]. Phone , & P [ 0 ]. age );
printf ( " \n %s %s %s" , & P [ 1 ]. name , & P [ 1 ]. Phone , & P [ 1 ]. age );
printf ( " \n %s %s %s \n " , & P [ 2 ]. name , & P [ 2 ]. Phone , & P [ 2 ]. age );
fclose ( filepoint );
return 0 ;
}
 来自CODE的代码片
file2.c
                 至此,我们学了如何打开一个文件,将数据写入文件,读取出文件的内容,最后关闭文件。不少人潜意思里觉得文件很复杂,有意或无意地回避文件的使用。其实文件主要就是这些库函数的应用,便可发挥出文件强大的功能,编写出具有记忆的程序,比如通讯录,备忘录之类的应用。以后,你们会接触到程序记忆的另一个强大的载体-数据库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值