C語言文件操作函數大全

clearerr--清楚文件流的錯誤標識

相關函數 feof
表頭文件 #include<stdio.h> 
定義函數 void clearerr(FILE * stream); 
函數說明 clearerr()清除參數stream指定的文件流所使用的錯誤旗標。 
返回值 
  

fclose--關閉文件 

相關函數 close,fflush,fopen,setbuf 
表頭文件 #include<stdio.h> 
定義函數 int fclose(FILE * stream); 
函數說明 fclose()用來關閉先前fopen()打開的文件。此動作會讓緩衝區內的數據寫入文件中,並釋放系統所提供的文件資源。 
返回值 若關文件動作成功則返回0,有錯誤發生時則返回EOF並把錯誤代碼存到errno。 
錯誤代碼 EBADF表示參數stream非已打開的文件。 
範例 請參考fopen()。
  

fdopen--將文件描述詞轉爲文件指針 

相關函數 fopen,open,fclose 
表頭文件 #include<stdio.h> 
定義函數 FILE * fdopen(int fildes,const char * mode); 
函數說明 fdopen()會將參數fildes 的文件描述詞,轉換爲對應的文件指針後返回。參數mode 字符串則代表着文件指針的流形態,此形態必須和原先文件描述詞讀寫模式相同。關於mode 字符串格式請參考fopen()。 
返回值 轉換成功時返回指向該流的文件指針。失敗則返回NULL,並把錯誤代碼存在errno中。
範例 
#include<stdio.h>
main()
{
FILE * fp =fdopen(0,”w+”);
fprintf(fp,”%s/n”,”hello!”);
fclose(fp);
}

執行 hello!

feof--檢查文件流是否讀到了文件尾 

相關函數 fopen,fgetc,fgets,fread 
表頭文件 #include<stdio.h> 
定義函數 int feof(FILE * stream); 
函數說明 feof()用來偵測是否讀取到了文件尾,尾數stream爲fopen()所返回之文件指針。如果已到文件尾則返回非零值,其他情況返回0。 
返回值 返回非零值代表已到達文件尾。
  

fflush--更新緩衝區 

相關函數 write,fopen,fclose,setbuf 
表頭文件 #include<stdio.h> 
定義函數 int fflush(FILE* stream); 
函數說明 fflush()會強迫將緩衝區內的數據寫回參數stream指定的文件中。如果參數stream爲NULL,fflush()會將所有打開的文件數據更新。 
返回值 成功返回0,失敗返回EOF,錯誤代碼存於errno中。 
錯誤代碼 EBADF 參數stream 指定的文件未被打開,或打開狀態爲只讀。其它錯誤代碼參考write()。
  

fgetc--由文件中讀取一個字符 

相關函數 open,fread,fscanf,getc 
表頭文件 include<stdio.h> 
定義函數 nt fgetc(FILE * stream); 
函數說明 fgetc()從參數stream所指的文件中讀取一個字符。若讀到文件尾而無數據時便返回EOF。 
返回值 getc()會返回讀取到的字符,若返回EOF則表示到了文件尾。 
範例
#include<stdio.h>
main()
{
FILE *fp;
int c;
fp=fopen(“exist”,”r”);
while((c=fgetc(fp))!=EOF)
printf(“%c”,c);
fclose(fp);
}

fgets--由文件中讀取一字符串 

相關函數 open,fread,fscanf,getc 
表頭文件 include<stdio.h> 
定義函數 har * fgets(char * s,int size,FILE * stream); 
函數說明 fgets()用來從參數stream所指的文件內讀入字符並存到參數s所指的內存空間,直到出現換行字符、讀到文件尾或是已讀了size-1個字符爲止,最後會加上NULL作爲字符串結束。 
返回值 gets()若成功則返回s指針,返回NULL則表示有錯誤發生。 
範例 
#include<stdio.h>
main()
{
char s[80];
fputs(fgets(s,80,stdin),stdout);
}

執行 this is a test /*輸入*/
this is a test /*輸出*/

  

fileno--返回文件流所使用的文件描述詞 

相關函數 open,fopen 
表頭文件 #include<stdio.h> 
定義函數 int fileno(FILE * stream); 
函數說明 fileno()用來取得參數stream指定的文件流所使用的文件描述詞。 
返回值 返回文件描述詞。
範例 
#include<stdio.h>
main()
{
FILE * fp;
int fd;
fp=fopen(“/etc/passwd”,”r”);
fd=fileno(fp);
printf(“fd=%d/n”,fd);
fclose(fp);
}

執行 fd=3

  

fopen--打開文件 

相關函數 open,fclose 
表頭文件 #include<stdio.h> 
定義函數 FILE * fopen(const char * path,const char * mode); 
函數說明 參數path字符串包含欲打開的文件路徑及文件名,參數mode字符串則代表着流形態。
mode有下列幾種形態字符串:
r 打開只讀文件,該文件必須存在。
r+ 打開可讀寫的文件,該文件必須存在。
w 打開只寫文件,若文件存在則文件長度清爲0,即該文件內容會消失。若文件不存在則建立該文件。
w+ 打開可讀寫文件,若文件存在則文件長度清爲零,即該文件內容會消失。若文件不存在則建立該文件。
a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。
a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。
上述的形態字符串都可以再加一個b字符,如rb、w+b或ab+等組合,加入b 字符用來告訴函數庫打開的文件爲二進制文件,而非純文字文件。不過在POSIX系統,包含Linux都會忽略該字符。由fopen()所建立的新文件會具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)權限,此文件權限也會參考umask值。 
返回值 文件順利打開後,指向該流的文件指針就會被返回。若果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。 
附加說明 一般而言,開文件後會作一些文件讀取或寫入的動作,若開文件失敗,接下來的讀寫動作也無法順利進行,所以在fopen()後請作錯誤判斷及處理。 
範例
#include<stdio.h>
main()
{
FILE * fp;
fp=fopen(“noexist”,”a+”);
if(fp= =NULL) return;
fclose(fp);
}

fputc--將一指定字符寫入文件流中 

相關函數 fopen,fwrite,fscanf,putc 
表頭文件 #include<stdio.h> 
定義函數 int fputc(int c,FILE * stream); 
函數說明 fputc 會將參數c 轉爲unsigned char 後寫入參數stream 指定的文件中。 
返回值 fputc()會返回寫入成功的字符,即參數c。若返回EOF則代表寫入失敗。 
範例 
#include<stdio.h>
main()
{
FILE * fp;
char a[26]=”abcdefghijklmnopqrstuvwxyz”;
int i;
fp= fopen(“noexist”,”w”);
for(i=0;i<26;i++)
fputc(a
,fp);
fclose(fp);
}

fputs--將一指定的字符串寫入文件內 

相關函數 fopen,fwrite,fscanf,fputc,putc 
表頭文件 #include<stdio.h> 
定義函數 int fputs(const char * s,FILE * stream); 
函數說明 fputs()用來將參數s所指的字符串寫入到參數stream所指的文件內。 
返回值 若成功則返回寫出的字符個數,返回EOF則表示有錯誤發生。 
範例 請參考fgets()。 
fread(從文件流讀取數據) 
相關函數 fopen,fwrite,fseek,fscanf 
表頭文件 #include<stdio.h> 
定義函數 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream); 
函數說明 fread()用來從文件流中讀取數據。參數stream爲已打開的文件指針,參數ptr 指向欲存放讀取進來的數據空間,讀取的字符數以參數size*nmemb來決定。Fread()會返回實際讀取到的nmemb數目,如果此值比參數nmemb 來得小,則代表可能讀到了文件尾或有錯誤發生,這時必須用feof()或ferror()來決定發生什麼情況。
返回值 返回實際讀取到的nmemb數目。 
附加說明 
範例 
#include<stdio.h>
#define nmemb 3
struct test
{
char name[20];
int size;
}s[nmemb];
int main(){
FILE * stream;
int i;
stream = fopen(“/tmp/fwrite”,”r”);
fread(s,sizeof(struct test),nmemb,stream);
fclose(stream);
for(i=0;i<nmemb;i++)
printf(“name[%d]=%-20s:size[%d]=%d/n”,i,s
.name,i,s.size);
}

執行
name[0]=Linux! size[0]=6
name[1]=FreeBSD! size[1]=8
name[2]=Windows2000 size[2]=11

 

freopen--打開文件 

相關函數 fopen,fclose 
表頭文件 #include<stdio.h> 
定義函數 FILE * freopen(const char * path,const char * mode,FILE * stream); 
函數說明 參數path字符串包含欲打開的文件路徑及文件名,參數mode請參考fopen()說明。參數stream爲已打開的文件指針。Freopen()會將原stream所打開的文件流關閉,然後打開參數path的文件。 
返回值 文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。
範例 
#include<stdio.h>
main()
{
FILE * fp;
fp=fopen(“/etc/passwd”,”r”); 
fp=freopen(“/etc/group”,”r”,fp);
fclose(fp);
}

fseek--移動文件流的讀寫位置 

相關函數 rewind,ftell,fgetpos,fsetpos,lseek 
表頭文件 #include<stdio.h> 
定義函數 int fseek(FILE * stream,long offset,int whence); 
函數說明 fseek()用來移動文件流的讀寫位置。參數stream爲已打開的文件指針,參數offset爲根據參數whence來移動讀寫位置的位移數。 
參數 whence爲下列其中一種:
SEEK_SET從距文件開頭offset位移量爲新的讀寫位置。SEEK_CUR 以目前的讀寫位置往後增加offset個位移量。
SEEK_END將讀寫位置指向文件尾後再增加offset個位移量。
當whence值爲SEEK_CUR 或SEEK_END時,參數offset允許負值的出現。
下列是較特別的使用方式:
1) 欲將讀寫位置移動到文件開頭時:fseek(FILE *stream,0,SEEK_SET);
2) 欲將讀寫位置移動到文件尾時:fseek(FILE *stream,0,0SEEK_END); 
返回值 當調用成功時則返回0,若有錯誤則返回-1,errno會存放錯誤代碼。 
附加說明 fseek()不像lseek()會返回讀寫位置,因此必須使用ftell()來取得目前讀寫的位置。
範例
#include<stdio.h>
main()
{
FILE * stream;
long offset;
fpos_t pos;
stream=fopen(“/etc/passwd”,”r”);
fseek(stream,5,SEEK_SET);
printf(“offset=%d/n”,ftell(stream));
rewind(stream);
fgetpos(stream,&pos);
printf(“offset=%d/n”,pos);
pos=10;
fsetpos(stream,&pos);
printf(“offset = %d/n”,ftell(stream));
fclose(stream);
}

執行 offset = 5
offset =0
offset=10

  

ftell--取得文件流的讀取位置 

相關函數 fseek,rewind,fgetpos,fsetpos 
表頭文件 #include<stdio.h> 
定義函數 long ftell(FILE * stream); 
函數說明 ftell()用來取得文件流目前的讀寫位置。參數stream爲已打開的文件指針。 
返回值 當調用成功時則返回目前的讀寫位置,若有錯誤則返回-1,errno會存放錯誤代碼。 
錯誤代碼 EBADF 參數stream無效或可移動讀寫位置的文件流。
範例 參考fseek()。
  

fwrite--將數據寫至文件流 

相關函數 fopen,fread,fseek,fscanf 
表頭文件 #include<stdio.h> 
定義函數 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream); 
函數說明 fwrite()用來將數據寫入文件流中。參數stream爲已打開的文件指針,參數ptr 指向欲寫入的數據地址,總共寫入的字符數以參數size*nmemb來決定。Fwrite()會返回實際寫入的nmemb數目。 
返回值 返回實際寫入的nmemb數目。
範例 
#include<stdio.h>
#define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}
#define nmemb 3
struct test
{
char name[20];
int size;
}s[nmemb];
main()
{
FILE * stream;
set_s(0,”Linux!”);
set_s(1,”FreeBSD!”);
set_s(2,”Windows2000.”);
stream=fopen(“/tmp/fwrite”,”w”);
fwrite(s,sizeof(struct test),nmemb,stream);
fclose(stream);
}

執行 參考fread()。
  

getc--由文件中讀取一個字符 

相關函數 read,fopen,fread,fgetc 
表頭文件 #include<stdio.h> 
定義函數 int getc(FILE * stream); 
函數說明 getc()用來從參數stream所指的文件中讀取一個字符。若讀到文件尾而無數據時便返回EOF。雖然getc()與fgetc()作用相同,但getc()爲宏定義,非真正的函數調用。 
返回值 getc()會返回讀取到的字符,若返回EOF則表示到了文件尾。 
範例 參考fgetc()。
  

getchar--由標準輸入設備內讀進一字符 

相關函數 fopen,fread,fscanf,getc 
表頭文件 #include<stdio.h> 
定義函數 int getchar(void); 
函數說明 getchar()用來從標準輸入設備中讀取一個字符。然後將該字符從unsigned char轉換成int後返回。 
返回值 getchar()會返回讀取到的字符,若返回EOF則表示有錯誤發生。 
附加說明 getchar()非真正函數,而是getc(stdin)宏定義。
範例 
#include<stdio.h>
main()
{
FILE * fp;
int c,i;
for(i=0li<5;i++)
{
c=getchar();
putchar(c);
}
}

執行 1234 /*輸入*/
1234 /*輸出*/

gets--由標準輸入設備內讀進一字符串 

相關函數 fopen,fread,fscanf,fgets 
表頭文件 #include<stdio.h> 
定義函數 char * gets(char *s); 
函數說明 gets()用來從標準設備讀入字符並存到參數s所指的內存空間,直到出現換行字符或讀到文件尾爲止,最後加上NULL作爲字符串結束。 
返回值 gets()若成功則返回s指針,返回NULL則表示有錯誤發生。 
附加說明 由於gets()無法知道字符串s的大小,必須遇到換行字符或文件尾纔會結束輸入,因此容易造成緩衝溢出的安全性問題。建議使用fgets()取代。 
範例 參考fgets()
  

mktemp--產生唯一的臨時文件名 

相關函數 tmpfile 
表頭文件 #include<stdlib.h> 
定義函數 char * mktemp(char * template); 
函數說明 mktemp()用來產生唯一的臨時文件名。參數template所指的文件名稱字符串中最後六個字符必須是XXXXXX。產生後的文件名會借字符串指針返回。 
返回值 文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno中。
附加說明 參數template所指的文件名稱字符串必須聲明爲數組,如:
char template[ ]=”template-XXXXXX”;
不可用char * template=”template-XXXXXX”;
範例 
#include<stdlib.h>
main()
{
char template[ ]=”template-XXXXXX”;
mktemp(template);
printf(“template=%s/n”,template);
}

 

putc-將一指定字符寫入文件中 

相關函數 fopen,fwrite,fscanf,fputc 
表頭文件 #include<stdio.h> 
定義函數 int putc(int c,FILE * stream); 
函數說明 putc()會將參數c轉爲unsigned char後寫入參數stream指定的文件中。雖然putc()與fputc()作用相同,但putc()爲宏定義,非真正的函數調用。 
返回值 putc()會返回寫入成功的字符,即參數c。若返回EOF則代表寫入失敗。 
範例 參考fputc()。
  

putchar--將指定的字符寫到標準輸出設備 

相關函數 fopen,fwrite,fscanf,fputc 
表頭文件 #include<stdio.h> 
定義函數 int putchar (int c); 
函數說明 putchar()用來將參數c字符寫到標準輸出設備。 
返回值 putchar()會返回輸出成功的字符,即參數c。若返回EOF則代表輸出失敗。 
附加說明 putchar()非真正函數,而是putc(c,stdout)宏定義。 
範例 參考getchar()。
 

rewind--重設文件流的讀寫位置爲文件開頭 

相關函數 fseek,ftell,fgetpos,fsetpos 
表頭文件 #include<stdio.h> 
定義函數 void rewind(FILE * stream); 
函數說明 rewind()用來把文件流的讀寫位置移至文件開頭。參數stream爲已打開的文件指針。此函數相當於調用fseek(stream,0,SEEK_SET)。
返回值 
範例 參考fseek()

setbuf--設置文件流的緩衝區


相關函數 setbuffer,setlinebuf,setvbuf 
表頭文件 #include<stdio.h> 
定義函數 void setbuf(FILE * stream,char * buf); 
函數說明 在打開文件流後,讀取內容之前,調用setbuf()可以用來設置文件流的緩衝區。參數stream爲指定的文件流,參數buf指向自定的緩衝區起始地址。如果參數buf爲NULL指針,則爲無緩衝IO。Setbuf()相當於調用:setvbuf(stream,buf,buf?_IOFBF:_IONBF,BUFSIZ) 
返回值 
  

setbuffer--設置文件流的緩衝區 

相關函數 setlinebuf,setbuf,setvbuf 
表頭文件 #include<stdio.h> 
定義函數 void setbuffer(FILE * stream,char * buf,size_t size); 
函數說明 在打開文件流後,讀取內容之前,調用setbuffer()可用來設置文件流的緩衝區。參數stream爲指定的文件流,參數buf指向自定的緩衝區起始地址,參數size爲緩衝區大小。 
返回值 

setlinebuf--設置文件流爲線性緩衝區 

相關函數 setbuffer,setbuf,setvbuf 
表頭文件 #include<stdio.h> 
定義函數 void setlinebuf(FILE * stream); 
函數說明 setlinebuf()用來設置文件流以換行爲依據的無緩衝IO。相當於調用:setvbuf(stream,(char * )NULL,_IOLBF,0);請參考setvbuf()。 
返回值 

setvbuf--設置文件流的緩衝區 

相關函數 setbuffer,setlinebuf,setbuf 
表頭文件 #include<stdio.h> 
定義函數 int setvbuf(FILE * stream,char * buf,int mode,size_t size); 
函數說明 在打開文件流後,讀取內容之前,調用setvbuf()可以用來設置文件流的緩衝區。參數stream爲指定的文件流,參數buf指向自定的緩衝區起始地址,參數size爲緩衝區大小,參數mode有下列幾種
_IONBF 無緩衝IO
_IOLBF 以換行爲依據的無緩衝IO
_IOFBF 完全無緩衝IO。如果參數buf爲NULL指針,則爲無緩衝IO。 
返回值 

ungetc--將指定字符寫回文件流中 

相關函數 fputc,getchar,getc 
表頭文件 #include<stdio.h> 
定義函數 int ungetc(int c,FILE * stream); 
函數說明 ungetc()將參數c字符寫回參數stream所指定的文件流。這個寫回的字符會由下一個讀取文件流的函數取得。 
返回值 成功則返回c 字符,若有錯誤則返回EOF。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章