打印

C解析之七文件进阶

[复制链接]
800|11
手机看帖
扫描二维码
随时随地手机跟帖
沙发
elecintop|  楼主 | 2014-4-27 22:36 | 只看该作者
文件的读/写是最常用的文件操作,C语言标准函数库提供了多种文件读写函数,分别在字符,字符串,数据块三个层面上的读写操作,适应不同的文件读写需求。

使用特权

评论回复
板凳
elecintop|  楼主 | 2014-4-27 22:36 | 只看该作者
1.字符读写函数:
1.1读字符函数fgetc,从指定文件中读取一个字符,助记符为(file+get+char)。
用法:fgetc(FILE *filepoint)
返回值:fgetc的返回值是从文件读取到的字符:如果读到文件末尾,之返回EOF(end of file)。
自动后移:文件内部有一个位置指针,指向当前读取的字节,fgetc后该指针会自动往后移 动 便可以依次读取字符。

使用特权

评论回复
地板
elecintop|  楼主 | 2014-4-27 22:37 | 只看该作者
1.2.写字符函数fputc,往指定文件内写入一个字符,助记符为(file+input+char)。
用法:fputc(int ch,FILE *filepoint)
返回值:fputc的返回值是写入文件的字符:如果发生错误则返回EOF(end of file)。
自动后移:fputc每次写入一个字符,文件内部的位置指针都会往后移动一个字节。

使用特权

评论回复
5
elecintop|  楼主 | 2014-4-27 22:38 | 只看该作者
下面是一个很好的例子,键盘的输入持续的输入(换行键结束)写入E盘下file1.txt文件,并将文件的内容输出到屏幕上:
#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;
}

使用特权

评论回复
6
elecintop|  楼主 | 2014-4-27 22:39 | 只看该作者
2.字符串读写函数:
2.1读字符串函数fgets,从文件中读取指定长度字符到字符串变量中,助记符为(file get strings)。
用法:fgets(char * string,int nunber,FILE * filepoint)
返回值:返回文件中读出的字符串。
number:只能读取出number-1个字符,最后一个位置需要放入'\0'结束标志。

使用特权

评论回复
7
elecintop|  楼主 | 2014-4-27 22:41 | 只看该作者
2.2 写字符串函数fputs,往指定文件写入一个字符串,助记符为(file input strings)
用法:fputs(char *string,FILE * filepoint)
返回值:写入成功返回非负值:发生错误则返回EOF.

使用特权

评论回复
8
elecintop|  楼主 | 2014-4-27 22:42 | 只看该作者
3.数据块读写函数:数据块读写函数能将结构体,数组等大块的数据写入文件,直接将内存若干字节的数据写入文件。
3.1写数据函数fwrite:fwrite(void *p,int size,int items,FILE *filepoint)
p:数据的地址
size:每个数据的长度
items:数据的个数
返回值:写入成功返回数据个数items:错误时返回小于items.

使用特权

评论回复
9
elecintop|  楼主 | 2014-4-27 22:42 | 只看该作者
3.2读数据块函数fread:fread(void *p,int size,int items,FILE *filepoint)
p:读出数据存放地址
size:每个数据的长度
items:需要读出的数据个数
返回值:成功返回读取数据个数items:错误时返回小与items

使用特权

评论回复
10
elecintop|  楼主 | 2014-4-27 22:43 | 只看该作者
下面的示例,存储数据块到E盘下file2.txt,让后读取出来显示在屏幕上:
#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;
}

使用特权

评论回复
11
elecintop|  楼主 | 2014-4-27 22:43 | 只看该作者
至此,我们学了如何打开一个文件,将数据写入文件,读取出文件的内容,最后关闭文件。不少人潜意思里觉得文件很复杂,有意或无意地回避文件的使用。其实文件主要就是这些库函数的应用,便可发挥出文件强大的功能,编写出具有**的程序,比如通讯录,备忘录之类的应用。以后,你们会接触到程序**的另一个强大的载体-数据库。

使用特权

评论回复
12
vivilzb1985| | 2014-4-28 22:53 | 只看该作者
elecintop 发表于 2014-4-27 22:36
文件的读/写是最常用的文件操作,C语言标准函数库提供了多种文件读写函数,分别在字符,字符串,数据块三个 ...

文件的读写是基本的操作,说的是啦,,不管啥程序的无外乎读写的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

176

主题

1329

帖子

3

粉丝