1、文件打开关闭
FILE *fp;
fp = fopen("./test.txt", 'r');
fclose(fp);
2、读写单个字符
fputc(buffer_write[index], fp); //写什么;写到哪里去
data = fgetc(fp);
3、读写字符串
fputs(buffer_write, fp);
fgets(buffer_read, 128, fp); //读到哪里去;想读多少个;从哪里读
4、读写数据块
fwrite(buffer_write, sizeof(char), strlen(buffer_write), fp); //写什么;每个数据大小;想要写入的数据量;写到哪里去
fread(buffer_read, sizeof(char), 128, fp); //读到哪里去;每个数据大小;想要读多少个;从哪里读
5、文件指针位置
A - 函数ftell() 返回文件指针的位置
int file_offest = 0;
file_offest = ftell(fp);
函数原型:long int ftell(FILE *fp);
B - 函数fseek() 控制文件指针到任意位置
函数原型:int fseek(FILE *fptr, long off, int whence); //所要操作的文件指针;偏移量; 基地址(SEEK_SET开头, SEEK_CUR当前, SEEK_END结尾)
例:fseek(fp, 0, SEEK_SET); 回到文件起始位置
代码1
1 #include <stdio.h>
2 #include <string.h>
3
4 int main(int argc, char *argv[])
5 {
6 FILE *fp = NULL;
7 int index, res;
8 int data;
9 char *temp_write = "First\nMiddle\nLast\n";
10
11 fp = fopen("./test.txt", "w"); //不明白 “rw”就无法写入,可能分先后顺序。先写,所以 w 在前
12 if(fp == NULL)
13 {
14 printf("ERROR: file opening failed! \n");
15 return -1;
16 }
17 printf("File opening success. \n");
18
19 // 写:fputc()
20 for(index = 0; index <= strlen(temp_write); index++)
21 {
22 // 函数原型:int fputc(int data, FILE *fptr);
23 fputc(temp_write[index], fp); // parameter: 写什么;写到哪里去
24 printf("%d / %d: %c\n", index, strlen(temp_write), temp_write[index]);
25 }
26 fclose(fp);
27
28 fp = fopen("./test.txt","r");
29 //fseek(fp, 0, SEEK_SET);
30 printf("___ reading___\n");
31
32 // 读:fgetc()
33 // 函数原型:int fgetc(FILE *fptr);
34 while( (data = fgetc(fp)) != EOF)
35 {
36 if( data != 10 ) //换行回车符 的 ASCII码 为 10
37 printf("%d %c, ", data, (char)data);
38 else
39 {
40 printf("\n");
41 }
42 }
43
44 res = fclose(fp);
45 if(res < 0)
46 {
47 printf("ERROR: unable to close file! \n");
48 }
49 else
50 {
51 printf("File closed. \n");
52 }
53
54 return 0;
55 }
执行1
代码2
1 #include <stdio.h>
2 #include <stdlib.h> //malloc()
3
4 #define BUFFER_LENGTH 128
5
6 int main(int argc, char *argv[])
7 {
8 FILE *fp = NULL;
9 char *temp = "First\nMiddle\nLast\n";
10 char *buffer_read = NULL;
11 int fpos;
12
13 fp = fopen("./test.txt", "w");
14 // 写: fputs()
15 // 函数原型:int fputs(const char *str, FILE *fptr);
16 // parameter: 写什么;写到哪里去
17 fputs(temp, fp);
18 fclose(fp);
19
20 fp = fopen("./test.txt", "r");
21
22 fpos = ftell(fp);
23 printf("File pointer pos before reading: %d\n", fpos);
24
25
26 buffer_read = (char *)malloc(sizeof(char) * BUFFER_LENGTH);
27 // 读: fgets()
28 // 函数原型:char *fgets(char *str, int length, FILE *fptr);
29 // parameter: 读到哪里里去;读多少个;从哪里读
30 while( (fgets(buffer_read, BUFFER_LENGTH, fp)) > 0)
31 {
32 printf("reading: %s\n", buffer_read);
33 }
34
35 fpos = ftell(fp);
36 printf("File pointer pos after reading: %d\n", fpos);
37
38 fclose(fp);
39 return 0;
40 }
执行2
代码3
1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4
5 #define BUFFER_LENGTH 128
6
7 int main(int argc, char *argv[])
8 {
9 FILE *fp = NULL;
10 char *buffer_write = "Nan\nJing\nUniversity\n";
11 char *buffer_read = NULL;
12 int length_write = strlen(buffer_write);
13 int res;
14
15 // 写:fwrite()
16 // 函数原型:size_t fwrite(const void *ptr, size_t size, size_t n, FILE *fptr);
17 // parameter: 写什么;每个数据的大小;数据量;写到哪里去
18 fp = fopen("./test.txt", "w");
19 if(length_write == fwrite(buffer_write, sizeof(char), length_write, fp))
20 {
21 printf("success in writing data.\n");
22 }
23 else
24 {
25 printf("ERROR: failure in writing data\n");
26 }
27 fclose(fp);
28
29 // 读:fread()
30 // 函数原型:size_t fread(void *ptr, size_t size, size_t n, FILE *fptr);
31 // parameter: 读到哪里去;每个数据的大小;数据量;从哪里读
32 fp = fopen("./test.txt", "r");
33 buffer_read = (char *)malloc(sizeof(char) * BUFFER_LENGTH);
34 res = fread(buffer_read, sizeof(char), BUFFER_LENGTH, fp);
35 buffer_read[res] = '\0';
36 fclose(fp);
37
38 printf("%s\n", buffer_read);
39
40 return 0;
41 }
执行3