文件打開模式.
- r: 打開已有的文本文件, 只讀
- w: 打開一個(gè)文本文件, 允許寫入, 如果文件不存在, 則會(huì)新創(chuàng)建一個(gè)文件,從頭開始寫入, 如果存在,則會(huì)重新寫入.
- a: 打開一個(gè)文本文件, 以追加的方式寫入, 文件不存在, 會(huì)創(chuàng)建. 存在,會(huì)追加.
- r+: 打開一個(gè)文本文件, 允許讀寫.
- w+: 打開一個(gè)文本文件, 允許讀寫文件. 文件已存在,重寫. 不存在,創(chuàng)建
- a+: 打開一個(gè)文本文件, 允許讀寫文件, 文件存在,創(chuàng)建,追加寫入. 不存在, 創(chuàng)建,重新寫入.
如果處理的是二進(jìn)制文件 ,則需要下面的訪問模式來取代上述的訪問模式.
- 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 復(fù)制文件------\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("-----使用緩沖區(qū), 讀取并操作文件------\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內(nèi)容
1+2=
2-1=
3*6=
18/2=