文件打开模式.
- r: 打开已有的文本文件, 只读
- w: 打开一个文本文件, 允许写入, 如果文件不存在, 则会新创建一个文件,从头开始写入, 如果存在,则会重新写入.
- a: 打开一个文本文件, 以追加的方式写入, 文件不存在, 会创建. 存在,会追加.
- r+: 打开一个文本文件, 允许读写.
- w+: 打开一个文本文件, 允许读写文件. 文件已存在,重写. 不存在,创建
- a+: 打开一个文本文件, 允许读写文件, 文件存在,创建,追加写入. 不存在, 创建,重新写入.
如果处理的是二进制文件 ,则需要下面的访问模式来取代上述的访问模式.
- rb, wb, ab, rb+, r+b, wb+, w+b, ab+, a+b
例
#include <stdio.h>
#include <stdlib.h>
int m()
{
FILE *fptr = fopen("./test/123.txt","r+");
if(fptr) //文件存在
{
printf("File opened successfully\n");
fclose(fptr);
fptr = NULL;
}else {
printf("File could not be opened\n");
}
return 0;
}
int m1() {
printf("-----读文件------\n");
FILE *fptr = fopen("/Users/yaqi/Documents/CLion-Project/untitled/test/123.txt","r");
if(fptr) {
printf("File opened successfully\n");
char c = fgetc(fptr);
printf("%c",c);
}
fclose(fptr);
fptr = NULL;
return 0;
}
int m2() {
printf("-----读文件------\n");
FILE *fptr = fopen("/Users/yaqi/Documents/CLion-Project/untitled/test/123.txt","r");
if(fptr) {
printf("File opened successfully\n");
while (fgetc(fptr) != EOF) {
const char c = fgetc(fptr);
printf("%c",c);
}
}
fclose(fptr);
fptr = NULL;
return 0;
}
int m3() {
printf("-----fputc 写文件------\n");
FILE *fptr = fopen("/Users/yaqi/Documents/CLion-Project/untitled/test/123.txt","a");
if(fptr) {
printf("File opened successfully\n");
fputc('z', fptr);
}
fclose(fptr);
fptr = NULL;
return 0;
}
int m4() {
printf("-----fputc 复制文件------\n");
FILE *fptr1 = fopen("/Users/yaqi/Documents/CLion-Project/untitled/test/123.txt","r");
FILE *fptr2 = fopen("/Users/yaqi/Documents/CLion-Project/untitled/test/456.txt","w");
if (fptr1 && fptr2) {
printf("File opened successfully\n");
while (1) {
char c = fgetc(fptr1);
if (c == EOF) {
break;
}
fputc(c, fptr2);
}
}
fclose(fptr1);
fclose(fptr2);
fptr1 = NULL;
fptr2 = NULL;
return 0;
}
int cacl(int a, char opt, int c) {
int result = 0;
switch (opt) {
case '+':
result = a + c;
break;
case '-':
result = a - c;
break;
case '/':
result = a / c;
break;
case '*':
result = a * c;
break;
default: ;
}
return result;
}
int m5() {
printf("-----使用缓冲区, 读取并操作文件------\n");
FILE *fptr = fopen("/Users/yaqi/Documents/CLion-Project/untitled/test/789.txt","r");
if(fptr) {
printf("File opened successfully\n");
while (1) {
char buffer[100] = {0};
fgets(buffer, sizeof(buffer), fptr);
int num1 = 0;
char opt = 0;
int num2 = 0;
char res = 0;
//格式化读取
sscanf(buffer, "%d%c%d%c", &num1, &opt, &num2, &res);
printf("%d %c %d %c %d\n", num1, opt, num2, res, cacl(num1, opt, num2));
//feof 判断是否读取到了末尾
if(feof(fptr)) {
break;
}
}
}
}
789.txt内容
1+2=
2-1=
3*6=
18/2=