赞
踩
1、流式文件:在C语言中对文件的记录是以字符(字节)为单位的。输入输出的数据流的开始和结束仅受程序控制而不受物理符号(如回车换行符)控制。也就是说,在输出时不以回车换行符作为记录的间隔(事实上C文件并不由记录构成)。我们把这种文件称为流式文件。
2、磁盘文件:在程序运行时,常常需要将一些数据(运行的最终结果或中间数据)输出到磁盘上存放起来,以后需要时再从磁盘中输入到计算机内存。
3、C文件本质:C语言将文件看作是一个字符(字节)的序列,即一个一个字符(字节)的数据顺序组成。
1、打开和关闭一个文件常用方法:fopen函数和fclose函数
FILE* fp;
if((fp = fopen("file.txt", "w+")) == NULL)
{
printf("can not open the file\n");
exit(0);
}
fclose(fp);
表示打开一个file.txt的文件;使用文件方式为w+(读/写/可新建,可按需要选择文件使用方式);若不能实现打开/新建的任务,此时fopen函数将会带回一个空指针NULL,NULL在头文件中已被定义为0;对于输出流,fclose函数会在文件关闭前刷新缓冲区,如果它执行成功,fclose返回值为0,否则返回EOF(-1)。
2、文件的读写
C++提供了低级的I/O功能和高级的l/O功能:
例:将一个文本文件中的内容写入到一个新的文本文件中。
#include "stdio.h" #include "stdlib.h" void main() { FILE* fp_r; if((fp_r = fopen("file_r.txt", "r")) == NULL) { printf("can not open the file_r\n"); exit(0); } FILE* fp_w; if((fp_w = fopen("file_w.txt", "w")) == NULL) { printf("can not open the file_w\n"); exit(0); } int file_size = 0; unsigned char ch[1] = {0}; fseek(fp_r,0L,SEEK_END); file_size = ftell(fp_r); rewind(fp_r); while(ftell(fp_r) != file_size) //判断是否读到文末 { ch[0] = fgetc(fp_r);// int fgetc(FILE *stream) 读一个字节 fputc(ch[0],fp_w);// int fputc(int char, FILE *stream) 写一个字节 // fread(ch,1,1,fp_r); // fread(buffer,size,count,fp) // fwrite(ch,1,1,fp_w); // fwrite(buffer,size,count,fp) // fscanf(fp_r,"%c",&ch[0]); // fscanf(文件指针,格式字符串,输入列表) // fprintf(fp_w,"%c",ch[0]); // fprintf(文件指针,格式字符串,输出列表) } fclose(fp_r); fclose(fp_w); }
特殊符号输出,以putc为例:
putc('a',fp_w); 输出字符a
putc(' ',fp_w); 输出空格
putc('\n',fp_w); 输出换行符
putc(10,fp_w); 输出换行符
注:
1、ch = feof(fp):返回值ch为所读取的一个字节,如果读到文件末尾或者读取出错时返回EOF
ch = fgetc(fp); // 先读在判断
while(!feof(fp)) // or while(EOF != ch)
{
//TODO;
printf("%x",ch);
c=fgetc(fp);
}
2、buf = fread(ptr, 1, 2, fp):返回值buf为所读取到的字节个数
buf = fread(ptr, 1, 2, fp); // 先读在判断
while(buf != 0)
{
//TODO;
printf("%d",buf);
buf = fread(ptr, 1, 2, fp);
}
3、fseek、ftell和rewind:判断读取文件大小
fseek(fp,0L,SEEK_END);
file_size = ftell(fp);
rewind(fp);
while(ftell(fp) != file_size)
{
//TODO;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。