我們平時在對一個文件進行操作的時候會進行如下步驟:
- 打開文件;
- 對文件進行操作(一般我們是進行讀寫操作);
- 關閉文件:
下面我們就圍繞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,如果返回非零值則表示有錯誤發生。