我们平时在对一个文件进行操作的时候会进行如下步骤:
- 打开文件;
- 对文件进行操作(一般我们是进行读写操作);
- 关闭文件:
下面我们就围绕linux操作系统中,对一个文件的操作进行简单讲解
打开文件
使用 <stdio.h>头文件中的==fopen()==函数即可打开文件,它的用法为
FILE *fopen(const char *path, const char *mode);
path 为文件路径(包括文件名);mode 为打开方式,两个都是字符串,也就是我们输入的时候都是带双引号的;FILE 为一个结构体,用来保存文件信息。
打开方式
注意:调用fopen()函数时,必须指明打开权限,但可以不指名读写方式(默认为“”t“”)
文件的读写
以字符形式读写文件
fgetc()
int fgetc(FILE *fp);
fp 为文件指针。fgetc()读取成功时返回读取到的字符,读取到文件末尾或者读取失败时返回EOF(一般我们认为EOF和-1等价,所以这里返回值是int类型)。
用法:
#include <stdio.h>
char ch=0;
FILE *fp=fopen("/home/farsight/Desktop/a.txt","r+");
ch=fgetc(fp);
printf("%c\r\n",ch);
注意:当读取到EOF时,如何区分是读到文件末尾还是文件出错。此时需要用到两个函数 foef()和 ferror()。
// feof()函数:当到达文件末尾时返回非零值,否则返回零值;
int feof(FILE *fp);
// ferror()函数:出错时返回非零值,否则返回零值;
int ferror(FILE *fp);
fputc()
int fputc(int c, FILE *fp);
c 为要写入的字符,fp为文件指针。fputc()写入成功时返回写入的字符,失败时返回EOF。
#include <stdio.h>
char ch='a';
FILE *fp=fopen("/home/farsight/Desktop/a.txt","r+");
fputc(ch,fp);
【示例】:
1 #include <stdio.h>
2 //读函数
3 void read(FILE *fp)
4 {
5 char ch=0;
6 while(ch=fgetc(fp)!=EOF)
7 {
8 printf("%c\r\n",ch);
9 }
10
11 if(feof(fp))
12 printf("文件到达末尾\r\n");
13 else
14 printf("文件出错\r\n");
15 }
16
17 //写函数
18 void write(FILE *fp)
19 {
20 char ch=0;
21 ch=getchar();
22 fputc(ch,fp);
23 fputc('\n',fp);
24 }
25 int main()
26 {
27 FILE *fp;
28 fp=fopen("/home/farsight/Desktop/a.txt","r+");
29 if(fp==NULL)
30 {
31 perror("open file error\n\r");
32 return -1;
33 }
34 read(fp);
35 write(fp);
36 fclose(fp);
37 return 0;
38 }
【结果】:
一般我们对文件操作时,很少以字符为单位进行操作,所以,大家掌握它的用法就可以了,不用管怎么存。
以行形式读写文件
fgets()
char *fgets(char *str, int size, FILE *fp);
str为字符数组,size为要读取得字符数目,fp为文件指针。
读取成功时返回字符数组首地址,读取失败时返回NULL;如果开始读取时,文件指针就在文件末尾,也返回NULL。
#define N 100
char str[N+1]={0};
FILE *fp=fopen("/home/farsight/Desktop/a.txt","r+");
fgets(str,sizeof(str),fp);
printf("%s\r\n",str);
fputs()
int fputs(const char *str, FILE *fp);
str为要写入的字符串,fp为文件指针。写入成功返回非负数,写入失败返回EOF。
【示例】:
1 #include <stdio.h>
2
3 int main()
4 {
5 int ret=0;
6 FILE *fp=fopen("/home/farsight/Desktop/source/a.txt","r+");
7 if(fp==NULL)
8 {
9 printf("打开文件失败\r\n");
10 }else{
11 printf("打开文件\r\n");
12 }
13
14 char str[100]="hello C is the best language";
15 char arr[100]={0};
16 if(ret=fputs(str,fp)!=EOF)
17 {
18 puts("写入成功");
19 }
20 else
21 {
22 puts("写入失败");
23 }
24
25 FILE *fq=fopen("/home/farsight/Desktop/source/b.txt","r+");
26 fgets(arr,sizeof(arr),fq);
27 printf("%s",arr);
28
29 fclose(fp);
30 fclose(fq);
31 return 0;
32
33 }
【结果】:
关闭文件
当我们操作完文件后,应该使用==fclose()==函数关闭文件,以释放相关资源,避免数据丢失。用法为:
int fclose(FILE *fp);
fp为文件指针,就是fopen()函数的返回值;文件正常关闭时,返回为0,如果返回非零值则表示有错误发生。