FILE结构体用来记录文件相关的信息
FILE结构体类型的指针变量叫做文件指针。 fopen函数可以打开一个文件并制作对应的FILE结构体变量,把结构体变量的地址作为返回值使用。如果执行失败则返回NULL。1 /* 2 文件练习 3 */ 4 #include5 int main() { 6 FILE *p_file = NULL; 7 p_file = fopen("a.txt", "w"); 8 if (p_file) { 9 //文件操作语句10 fclose(p_file);11 p_file = NULL;12 }13 return 0;14 }
使用fopen函数时需要指定文件的操作方式。操作方式由三部分构成,分别如下
第一部分有三个可选的字符'r', 'w'和'a'。这部分必须指定并且只能指定一个字符。 'r' 对文件进行读操作 'w' 对文件进行写操作。如果文件不存在则创建新文 件否则把原文件内容清除。 'a' 对文件进行写操作。如果文件已存在则会把新内 容追加在文件末尾 第二部分有一个可选字符'+',这部分可有可无。如果使用了这部分则表示对文件进行读写操作。 第三部分有一个可选字符‘b’,这部分可有可无。如果使用这部分则表示要对文件进行二进制操作。fclose函数用于关闭一个文件,当程序不再使用某个文件的时候一定要使用这个函数关闭它。
1 /* 2 文件练习 3 */ 4 #include5 int main() { 6 FILE *p_file = NULL; 7 char str[] = "abcdef"; 8 int loop = 0; 9 p_file = fopen("a.txt", "w");10 if (p_file) {11 //文件操作语句12 while (str[loop]) {13 if (EOF == fputc(str[loop], p_file)) {14 break;15 }16 loop++;17 }18 fclose(p_file);19 p_file = NULL;20 }21 return 0;22 }
1 /* 2 文件练习 3 */ 4 #include5 int main() { 6 FILE *p_file = NULL; 7 p_file = fopen("a.txt", "r"); 8 if (p_file) { 9 //文件操作语句10 char ch = 0;11 do {12 ch = fgetc(p_file);13 if (EOF != ch) {14 printf("%c", ch);15 }16 } while (EOF != ch);17 printf("\n");18 fclose(p_file);19 p_file = NULL;20 }21 return 0;22 }
fputc函数可以把一个字符写入到文件中,如果失败返回EOF。
fgetc函数可以从文件中读出一个字符并返回,如果超过文件尾部则返回EOF。
1 /* 2 文件练习 3 */ 4 #include5 int main() { 6 FILE *p_file = NULL; 7 int values[] = { 1, 2, 3, 4, 5}; 8 p_file = fopen("a.bin", "wb"); 9 if (p_file) {10 //文件操作语句11 int num = fwrite(values, sizeof(int), 5, p_file);12 printf("共写入%d个整数变量\n", num);13 fclose(p_file);14 p_file = NULL;15 }16 return 0;17 }
1 /* 2 文件练习 3 */ 4 #include5 int main() { 6 FILE *p_file = NULL; 7 int values[5] = { 0}, loop = 0; 8 p_file = fopen("a.bin", "rb"); 9 if (p_file) {10 //文件操作语句11 int num = fread(values, sizeof(int), 5, p_file);12 printf("共读出%d个整数变量\n", num);13 for (loop = 0; loop <= 4; loop++) {14 printf("%d ", values[loop]);15 }16 printf("\n");17 fclose(p_file);18 p_file = NULL;19 }20 return 0;21 }
fwrite函数可以一次把数组中的多个变量以二进制方式(在Unix系统上二进制方式写入和文本方式写入无差别,在Windows系统上若作为文本方式写入那么会将换行符写作\r\n,占两个字节)写入到文件中,返回值表示写入的变量个数。
fread函数可以一次以二进制方式从文件中读出多个变量的数值并记录到数组中,返回值表示读入的变量个数。
FILE结构体中使用位置指针记录下次对文件进行读写操作的位置,每次对文件进行过读写操作后位置指针都会移动。 rewind函数可以把位置指针移动到文件开头 fseek函数可以把位置指针移动到任何地方 SEEK_SET 0 代表文件开头 SEEK_CUR 1 位置指针当前位置
SEEK_END 2 代表文件结尾
1 /* 2 文件练习 3 */ 4 #include5 int main() { 6 FILE *p_file = NULL; 7 p_file = fopen("a.txt", "r"); 8 if (p_file) { 9 //文件操作语句10 fseek(p_file, 2, SEEK_SET);11 printf("%c ", fgetc(p_file));12 //rewind(p_file);13 fseek(p_file, 1, SEEK_CUR);14 printf("%c ", fgetc(p_file));15 //rewind(p_file);16 fseek(p_file, -3, SEEK_END);17 printf("%c ", fgetc(p_file));18 printf("\n");19 fclose(p_file);20 p_file = NULL;21 }22 return 0;23 }
fputs函数可以把一个字符串写入到文件中。
fgets函数可以从文件中读出一个字符串。
fprintf函数可以把数据以指定的格式写入到任何文件中。 fscanf函数可以从任何文件中以指定的格式读入数据到变量中。