文件操作
关闭文件
fclose(fp);
fp=NULL;
打开文件
FILE* fp=fopen("xxx.xxx","xx");
第一个参数为设置的文件的类型
第二个参数有以下
操作 | 作用 | 文件不存在 |
---|---|---|
"w"(只写) | 为了输出数据,打开一个文本文件 | 建立一个新的文件 |
"r"(只读) | 为了输出数据打开一个已经存在的文件 | 出错 |
“a”(追加) | 向文本文件尾添加数据 | 出错 |
“rb”(只读) | 为了输入数据,打开一个二进制文件 | 出错 |
“wb”(只写) | 为了输出数据,打开一个二进制文件 | 建立一个新的文件 |
“ab”(追加) | 向一个二进制文件尾添加数据 | 出错 |
“r+”(读写) | 为了读和写,打开一个文本文件 | 出错 |
“w+”(读写) | 为了读和写,建立一个新的文件 | 建立一个新的文件 |
“a+”(读写) | 打开一个文件,在文件尾进行读写 | 建立一个新的文件 |
“rb+”(读写) | 为了读和写,打开一个二进制文件 | 出错 |
“wb+”(速写) | 为了读和写,新建一个文本文件 | 建立一个新的文件 |
“ab+”(读写) | 打开一个二进制文件,在文件尾进行读写 | 建立一个新的文件 |
有关文件顺序读写的函数有
功能 | 函数名 | 适用于 |
---|---|---|
字符输入函数 | fgetc | 所有输入流 |
字符输出函数 | fputc | 所有输出流 |
文本行输入函数 | fgets | 所有输入流 |
文本行输出函数 | fputs | 所有输出流 |
格式化输入函数 | fscanf | 所有输入流 |
格式化输出函数 | fprintf | 所有输出流 |
二进制输入 | fread | 文件 |
二进制输出 | fwrite | 文件 |
键盘--标准输入设备-----stdin
屏幕--标准输出设备-----stdout
fputc函数的使用
int main()
{
FILE* fpwrite = fopen("text.txt", "w");
if (fpwrite == NULL)
{
perror("打开失败");
return;
}
fputc('H', fpwrite);
fputc('e', fpwrite);
fputc('l', fpwrite);
fputc('l', fpwrite);
fputc('o', fpwrite);
fclose(fpwrite);
fpwrite = NULL;
return 0;
}
运行后在text.txt文件中可以看到
fgetc函数的使用
text.txt中含有Hello
int main()
{
FILE* fpread = fopen("text.txt", "r");
if (fpread == NULL)
{
perror("打开失败");
return;
}
printf("%c\n", fgetc(fpread));
printf("%c\n", fgetc(fpread));
printf("%c\n", fgetc(fpread));
printf("%c\n", fgetc(fpread));
printf("%c\n", fgetc(fpread));
fclose(fpread);
fpread = NULL;
return 0;
}
运行后在命令台可以看到
fputs函数使用
int main()
{
FILE* fpwrites = fopen("text1.txt", "w");
if (fpwrites == NULL)
{
perror("打开失败");
return;
}
fputs("Hello", fpwrites);
fputs("World", fpwrites);
fclose(fpwrites);
fpwrites = NULL;
return 0;
}
在text1.txt文件中显示
fgets函数的使用
int main()
{
FILE* fpreads = fopen("text1.txt", "r");
char tmp[100] = { 0 };
if (fpreads == NULL)
{
perror("打开失败");
return;
}
//将fpreads中50个字符输出到tmp中
fgets(tmp, 50, fpreads);
//输出tmp
printf("%s\n", tmp);
fclose(fpreads);
fpreads = NULL;
return 0;
}
在命令台中显示
fprintf函数使用
int main()
{
FILE* fpwrite = fopen("text2.txt", "w");
if (fpwrite == NULL)
{
perror("打开失败");
return;
}
fprintf(fpwrite, "%s %s %s %d", "Hello", "Word", "in", 2021);
fclose(fpwrite);
fpwrite = NULL;
return 0;
}
在text2.txt中显示
fscanf函数的使用
int main()
{
FILE* fpread = fopen("text2.txt", "r");
char arr1[20] = { 0 };
char arr2[20] = { 0 };
char arr3[20] = { 0 };
int year = 0;
if (fpread == NULL)
{
perror("打开失败");
return;
}
//将fpread中数据存放到arr1, arr2, arr3, year中
fscanf(fpread, "%s %s %s %d", arr1, arr2, arr3, &year);
printf("%s %s %s %d", arr1, arr2, arr3, year);
fclose(fpread);
fpread = NULL;
return 0;
}
在命令台显示
fwrit函数使用
int main()
{
int a = 10000;
FILE* fpwrite = fopen("text3.txt", "wb");
if (fpwrite == NULL)
{
perror("打开失败");
return;
}
//将a以四个字节为单位存放一个元素到fpwrite中
fwrite(&a, 4, 1, fpwrite);//二进制的方式写到文件中
fclose(fpwrite);
fpwrite = NULL;
return 0;
}
以二进制编辑器打开text3.txt
fread函数使用
int main()
{
FILE* fpread = fopen("text3.txt", "rb");
int a = 0;
if (fpread == NULL)
{
perror("打开失败");
return;
}
/* 读取并显示数据 */
fread(&a, sizeof(a), 1, fpread);
printf("%d\n", a);
fclose(fpread);
fpread = NULL;
return(0);
}
在命令台显示