C语言文件操作

来源:互联网 发布:js jsonarray add 编辑:程序博客网 时间:2024/06/05 10:49
1  fopen 函数:
作用:打开了文件,并返回一个指向文件头的FILE类型指针
用法:
FILE *p = fopen("test1", "w+");//以"w+" 模式打开文件test1
打开方式:
“r” :可读,文件不存在会报错
“r+”:可读写,文件不存在会报错
“w”:可写,该模式会先清空文件,如果文件不存在,会创建该文件
“w+”:可读写,该模式会先清空文件,如果文件不存在,会创建该文件
“a”:追加、可写,指针指向文件尾部,写入内容就追加在文件尾部,保留原来的文件结尾的EOF 符,如果文件不存在,会创建该文件
“a+":追加、可读写,写入内容就追加在文件尾部,不保留原来EOF符,如果文件不存在,会创 建该文件,可以读取文件
加'b'模式同上上面的效果一样,只是以二进制模式打开文件的 ,Linux 只有一种文件类型,带b与不带b 的一样的!

2 getc() 与 putc() 函数 
getc():从文件中读取一个字符,并将指针移向下一个字符指针
 ch = getc() //从标准输入获取一个字符
 ch = getc(fp);//fp 是一个文件指针,从文件指针所指的文件中获取一个字符
putc() :将字符写进一个文件, 
putc(ch,fp);//将ch写到fp所指的文件中去

3 EOF:文件结尾
ch = getc(fp) == EOF 表示文件已经读取到结尾

4 fclose(): 关闭文件指针
fclose(fp) :关闭文件打开的指针,关闭成功返回0;

5 标准文件指针
a stdin :标准输入
b stdout :标准输出 
c stderr:标准错误

6 fgetc() 与 fput(c) 以及rewind() 的用法:
fgetc() :从文件中读取一个字符
用法 :char c = fgetc(fp);
fputc() :向文件写与一个字符
用法:fputc(c,fp);//将字符写进文件
rewind(fp); //让fp指针回到文件开始位置

7 fputs()与fgets()函数 以及 feof():
fgets():读取的字符串最大长度-1 个字符,或者读到第一个换行符后面,或者读到文件结尾
用法:
fgets(s,MAX,fp);//读取指针fp的内容到s字符串,最多读取MAX-1个,当s超出长度时不会报错
fputs():将字符串放入文件
用法:
fputs("helloworld1\n", fp);//将前面的字符串放入文件中
feof(fp); 判断文件fp是否已经到了文件结尾,如果是,返回真

1 - 7 示例程序 
#include <stdio.h>#define MAX 1000int main(){int cnt = 0;char ch = 'A';char s[MAX] = {0};FILE *fp; //定义一个指向file的指针 fp = fopen("test1.txt", "w+");if (fp == NULL) //打开文件失败的时候会返回一个NULL指针{fprintf(stdout, "test1 not opened!\n"); //此时与等价,printf("test1 not opened!\n");exit(1);}/*向文件中写与三行数据*/fputs("helloworld1\n", fp);fputs("helloworld2\n", fp);fputs("你好世界!\n", fp);//写入中文时有点问题fputc(ch,fp); //向文件中写一个字符'A'//使用fputc() ,fgetc() 函数来操作文件:,fgetc() 每次读取文件中的一个字符;rewind(fp); //使文件指针重新指向文件头ch = fgetc(fp);//使用fgetc() 读取文件中的fp所在位置的字符 并fp++while (ch != EOF){putchar(ch);//打印字符ch = fgetc(fp);}rewind(fp); //使文件指针重新指向文件头//fgets(s ,MAX,fp);//使用fgets() 读取文件中的一行数据,包括换行符 并将fp 指向下一行while (!feof(fp)) //feof() 判断文件是否到了结尾,如果是,返回真!feof(fp) 表示取反{fgets(s, MAX, fp);//使用fgets() 读取文件中的一行数据,包括换行符 并将fp 指向下一行printf("%s", s);}//printf("\n%s", s);fclose(fp);return 0;}


8 fprintf() 与 fscanf() 函数:
fprintf() : 与printf() 用法相同,只是输入对象不同,printf()输出对象是屏幕,fprintf()输出对象是文件:
fprintf(fp,"helloworld") //(fp : 文件指针 ) 将字符串写入到fp 指向文件中
printf与fprintf()的等价用法:fprintf(stdout,"helloworld") <=> printf("helloworld")

fscanf() : 与scanf() 用法相同,只是输入对象不同,scanf()输入对象是屏幕,fscanf()输入对象是文件:
fscanf(fp,"%s",s) //(fp : 文件指针 ) 将fp指向的文件内容写入到s字符串中遇到换行结束
 fprintf() 与 fscanf() 等价用法:fprintf(stdin,"%s",s) <=> scanf("%s",s)

9 fread() 与 fwrite() : 读写二进制文件
windows 系统中文件都换行都是以\r,\n结尾的,
以"rb"模式打开文件,文件行尾为是/r/n
以"r"模式打开文件,行尾是\n
fread() 与 fwrite()示例:
代码:
#include <stdio.h>#define MAX 1000int main(){FILE *fp = fopen("test.txt", "wb"); //以二进制读打开一个空文件char buf[4] = { 0 };//定义字符串的缓存的时候每次清空是一个好习惯buf[0] = 'a';buf[1] = 'b';buf[2] = '\n';buf[3] = 'd';fwrite(buf, sizeof(char), sizeof(buf), fp);//buf:缓存区,第二个参数:每次写入的最小单位;第三个函数:写入数量; 第四个参数:写入文件的文件指针fclose(fp);FILE *fp1 = fopen("test.txt", "rb"); //以二进制文件模式打开文件char buf1[1024] = {0};//定义字符串的缓存的时候每次清空是一个好习惯size_t ret = fread(buf1, sizeof(char), sizeof(buf1), fp1); //buf:缓存区,第二个参数:每次读的最小单位;第三个函数:读取数量; 第四个参数:读取的文件指针printf("ret = %u\n", ret);//fread() 会返回一个无符号int类型值for (int i = 0; i < ret; i++){printf("buf[%d] = %x\n", i, buf1[i]);//}printf("%s", buf1);fclose(fp1);return 0;}


原创粉丝点击