文件与流

文件:存储在外部介质上数据的集合。

1.在C语言中一个输入输出流就是一个字节流或者二进制流。

2.在C语言中文件由一连串的字节组成,中间没有分隔符,对文件的存取以字节为单位。输入输出的数据流的开始和结束仅受程序控制,而不受物理符号控制,如回车换行符。这种文件称为流式文件。
(和java中各种包的理念一样,底层是C C++,大概就是这样吧?以后有待探讨。)

3.文件标识(文件名) = 文件路径 + 文件名主干 + 文件后缀。

4.文件的分类: ASCII文件,二进制文件。
ASCII文件 :文本(text)文件,每个字节放一个ASCII码,代表一个字符。方便读取(但是花费转换时间),占据空间大。
二进制文件:把内存中的数据按其在内存中的存储形式鸳鸯输出到磁盘上存放。节省外存空间和转换时间,但是一个字节不对应一个字符不容易直接输出字符形式。

5.文件缓冲区:内存和磁盘交互数据时必须使用文件缓冲区。当缓冲区充满的时候才会将缓冲区的数据一起送出。(这就是为什么在java中,使用缓冲的时候最后一次输出之后必须要flush,不然剩下的数据都会留在缓冲区输不出来。)缓冲区大小由具体的C编译系统决定。

6.文件指针。在stdio.h中包含了文件指针FILE的声明。
使用了上篇文章结构体的知识。相当于创造了一个新的数据类型,即FILE类。

typedef struct{
short level;
unsigned flags;
char fd;
unsigned char hold;
short bsize;//缓冲区大小
unsigned char *buffer;//缓冲区地址
unsigned char *curp;//指针,当前的指向
unsigned istemp;
short token;
}FILE;

//使用的时候:
FILE *fp;

7.三个FILE类型的指针变量:
stdin     指向内存中与键盘相应的文件信息区(键盘输入)
stdout  指向内存中与显示器相应的文件信息区(输出到屏幕)
stderr   输出出错信息,指向内存中与显示器相应的文件信息区(输出到屏幕)
8.文件相关操作:
1.文件打开,关闭:

fp = fopen("文件名","使用文件方式");
fclose(fp);

2.向文件读取一个字符

/*****从键盘输入,写入文件*****/
char ch;
ch = getchar();//当有多余的换行符或是其他啊,应先使用一个getchar()进行接收
fputc(ch,fp);//#define putchar(c) fputc(c,stdout)

putchar(10);//向屏幕输出一个换行符。换行符的ASCII码是10
/*****从文件读入一个字符*****/
while(!feof(fp)){//feof(fp) != 0 时文件结束。到文件结尾,函数值为真
c=fgetc(fp);
...
}

3.向文件读取一个字符串

fgets(str,n,fp);//从fp指向的文件中读取n-1个字符,剩下那个是结束标志'\0'。
fputs(str,fp);//上面的最后一个结束符'\0'不输出。

4.文件的格式化读写

fprintf(fp,"格式字符串",输出列表);//i,t
fscanf(fp,"格式化字符串",输入列表);//&i,&t

5.向文件读写一组数据

//buffer 指针。size要读写的字节数。要进行count个size字节的数据项。成功返回count值
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);

9文件的随机读写


fseek(文件类型指针,位移量,起始点);//改变文件位置指针的位置
//起始点 用 0 -- “文件开始”  1 -- “当前位置”  2 -- “文件末尾”
//位移量 以起始点为基点,向前移动的字节数(大多数要求是long型)
//一般用于二进制文件
rewind(fp);//使文件位置重新置于文件开头
ftell(fp);//得到文件位置指针的当前值
feof(fp);//文件结束标志
ferror(fp);//值为0时表示没有出错,文件错误标志
clearerr(fp);// 使 ferror 和 feof 的值置零
//只要出现文件读写错误标志其值就会一直保留。直到对同一文件调用clearerr或者rewind函
//数或任何一个其他输入输出函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值