1 fopen 函数:
作用:打开了文件,并返回一个指向文件头的FILE类型指针
用法:
FILE *p = fopen("test1", "w+");//以"w+" 模式打开文件test1
打开方式:
“r” :可读,文件不存在会报错
“r+”:可读写,文件不存在会报错
“w”:可写,该模式会先清空文件,如果文件不存在,会创建该文件
“w+”:可读写,该模式会先清空文件,如果文件不存在,会创建该文件
“a”:追加、可写,指针指向文件尾部,写入内容就追加在文件尾部,
保留原来的文件结尾的EOF 符,
如果文件不存在,会创建该文件
“a+":追加、可读写,写入内容就追加在文件尾部,
不保留原来EOF符
,如果文件不存在,会创 建该文件,可以读取文件
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 1000
int 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
()输入对象是屏幕,f
scanf
()输入对象是文件:
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 1000
int 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;
}