1、ASCII文件、二进制文件

- ASCII文件:每个字节放在一个ASCII中
- 二进制文件:把内存中的数据储存样式原样输出到磁盘上
2、相关操作
fopen
- r
- 打开一个已有的文本文件,允许读取文件
- w
- 打开一个文本文件,允许写入文件
- 如果文件不存在,则会创建一个新文件。
- 如果文件存在,则该会被截断为零长度,重新写入
- a
- 打开一个文本文件,以追加模式写入文件。
- 如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容
- r+
- 打开一个文本文件,允许读写文件。
- w+
- 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件
- a+
- 打开一个文本文件,允许读写文件。
- 如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。
// 出错返回NULLFILE *fp = fopen("a.txt", "r");
fgetc/fputc
-
fgets/fputs
写入
FILE *fp; //判断文件是否打开失败 if ( (fp = fopen("/Users/wangchun/Desktop/a.txt", "w+")) == NULL ) { puts("Fail to open file!"); return -1; } // 写入字符串 fputs("hello", fp); // 写入一个字符 char a = 'a'; fputc(a, fp);读取
FILE *fp; //判断文件是否打开失败 if ( (fp = fopen("/Users/wangchun/Desktop/a.txt", "r+")) == NULL ) { puts("Fail to open file!"); return -1; } char ch = fgetc(fp); //循环读取文件的每一行数据 while( ch != EOF ) { printf("%c", ch); ch = fgetc(fp); } //操作结束后关闭文件 fclose(fp);rewind(fp)
-
fclose
关闭成功返回0
-
fread/fwrite
文件中储存、读取结构体列表 ```
include
include
define SIZE 3
struct student { char name[10]; int age; }stu[SIZE];
int main(void) {
for (int i = 0; i < SIZE; i++) {
stu[i].age = i;
strcpy(stu[i].name, "name");
}
FILE *fp;
//判断文件是否打开失败
if ( (fp = fopen("/Users/wangchun/Desktop/a.txt", "r+")) == NULL ) {
puts("Fail to open file!");
return -1;
}
// 写入结构体
for (int i = 0; i < SIZE; i++) {
fwrite(&stu[i], sizeof(struct student), 1, fp);
}
// fp重新开始
rewind(fp);
// 读取结构体
struct student s1;
for (int i = 0; i < SIZE; i++) {
fread(&s1,sizeof(struct student), 1, fp);
printf("%d\n",s1.age);
printf("%s\n",s1.name);
}
//操作结束后关闭文件
fclose(fp);
return 0;
}
<a name="FfJWS"></a>
#### fscanf/fprintf
<a name="4FVX1"></a>
#### fseek
- 改变文件的指针位置
> fseek(文件指针类型,位移量,起始点);
- 起始点有三种类型
> #define SEEK_SET 0 // 文件开头
> #define SEEK_CUR 1 // 当前位置
> #define SEEK_END 2 // 尾椎末尾
- 代码
FILE *fp;
//判断文件是否打开失败
if ( (fp = fopen("/Users/wangchun/Desktop/a.txt", "w+")) == NULL ) {
puts("Fail to open file!");
return -1;
}
fputs("01234", fp);
char a;
// 指向位置0
rewind(fp);
// 指向位置0
fseek(fp, 0, SEEK_SET);
a = fgetc(fp);
printf("%c",a);//0
// 指向位置1
fseek(fp, 1, SEEK_SET);
a = fgetc(fp);
printf("%c",a);//1
// 指向位置2
fseek(fp, 0, SEEK_CUR);
a = fgetc(fp);
printf("%c",a);//2
// 指向位置3
fseek(fp, 0, SEEK_CUR);
a = fgetc(fp);
printf("%c",a);//3
// 指向位置4
fseek(fp, -1, SEEK_END);
a = fgetc(fp);
printf("%c",a);//3
//操作结束后关闭文件
fclose(fp);
<a name="OJ4gv"></a>
#### ftell
- 返回当前位置
FILE *fp;
if ( (fp = fopen("/Users/wangchun/Desktop/a.txt", "w+")) == NULL ) {
puts("Fail to open file!");
return -1;
}
fputs("01234", fp);
fseek(fp, 0, SEEK_SET);
//加一个结束符,总长度6
printf("%d",ftell(fp));// 0
fseek(fp, 0, SEEK_END);
//加一个结束符,总长度6,所以位置是5
printf("%d",ftell(fp));// 5
fclose(fp);
feof
- 判断是否到文件末尾,0表示未到末尾
int end = feof(fp);
