程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話文件操作函數年夜全(超具體)

C說話文件操作函數年夜全(超具體)

編輯:關於C++

C說話文件操作函數年夜全(超具體)。本站提示廣大學習愛好者:(C說話文件操作函數年夜全(超具體))文章只能為提供參考,不一定能成為您想要的結果。以下是C說話文件操作函數年夜全(超具體)正文


fopen(翻開文件)
相干函數 open,fclose
表頭文件 #include<stdio.h>
界說函數 FILE * fopen(const char * path,const char * mode);
函數解釋 參數path字符串包括欲翻開的文件途徑及文件名,參數mode字符串則代表著流形狀。
mode有以下幾種形狀字符串:
r 翻開只讀文件,該文件必需存在。
r+ 翻開可讀寫的文件,該文件必需存在。
w 翻開只寫文件,若文件存在則文件長度清為0,即該文件內容會消逝。若文件不存在則樹立該文件。
w+ 翻開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消逝。若文件不存在則樹立該文件。
a 以附加的方法翻開只寫文件。若文件不存在,則會樹立該文件,假如文件存在,寫入的數據會被加到文件尾,即文件本來的內容會被保存。
a+ 以附加方法翻開可讀寫的文件。若文件不存在,則會樹立該文件,假如文件存在,寫入的數據會被加到文件尾後,即文件本來的內容會被保存。

r      Open text file for reading.  The stream is positioned at the beginning of the file.
r+     Open for reading and writing.  The stream is positioned at the beginning of the file.
w      Truncate file to zero length or create text file for writing.  The stream is positioned at the beginning of the file.
w+     Open for reading and writing.  The file is created if it does not exist, otherwise it is truncated.  The  stream  is  posi‐
       tioned at the beginning of the file.
a      Open  for  appending  (writing at end of file).  The file is created if it does not exist.  The stream is positioned at the
       end of the file.
a+     Open for reading and appending (writing at end of file).  The file is created if it does not exist.  The initial file posi‐
       tion for reading is at the beginning of the file, but output is always appended to the end of the file.

上述的形狀字符串都可以再加一個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);
}

1. fprintf
功效:傳送格局化輸入到一個文件中
表頭文件:#include<stdio.h>
函數原型:int fprintf(FILE *stream, char *format[, argument,...]);
FILE* 一個FILE型的指針
char* 格局化輸出函數,和printf裡的格局一樣
前往值:勝利時前往轉換的字節數,掉敗時前往一個正數
fp = fopen("/local/test.c","a+");
fprintf(fp,"%s\n",str);

2. fscanf
功效:從一個流中履行格局化輸出
表頭文件:#include<stdio.h>
函數原型:int fscanf(FILE *stream, char *format[,argument...]);
FILE* 一個FILE型的指針
char* 格局化輸入函數,和scanf裡的格局一樣
前往值:勝利時前往轉換的字節數,掉敗時前往一個正數
fp = fopen("/local/test.c","a+");
fscanf(fp,"%s",str);

3. clearerr(消除文件流的毛病旗標)
相干函數 feof
表頭文件 #include<stdio.h>
界說函數 void clearerr(FILE * stream);
函數解釋 clearerr()消除參數stream指定的文件流所應用的毛病旗標。
前往值
 
4.fclose(封閉文件)
相干函數 close,fflush,fopen,setbuf
表頭文件 #include<stdio.h>
界說函數 int fclose(FILE * stream);
函數解釋 fclose()用來封閉先前fopen()翻開的文件。此舉措會讓緩沖區內的數據寫入文件中,並釋放體系所供給的文件資本。
前往值 若關文件舉措勝利則前往0,有毛病產生時則前往EOF並把毛病代碼存到errno。
毛病代碼 EBADF表現參數stream非已翻開的文件。
典范 請參考fopen()。
 
5.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!

6.feof(檢討文件流能否讀到了文件尾)
相干函數 fopen,fgetc,fgets,fread
表頭文件 #include<stdio.h>
界說函數 int feof(FILE * stream);
函數解釋 feof()用來偵測能否讀取到了文件尾,尾數stream為fopen()所前往之文件指針。假如已到文件尾則前往非零值,其他情形前往0。
前往值 前往非零值代表已達到文件尾。
 
7.fflush(更新緩沖區)
相干函數 write,fopen,fclose,setbuf
表頭文件 #include<stdio.h>
界說函數 int fflush(FILE* stream);
函數解釋 fflush()會強制將緩沖區內的數據寫回參數stream指定的文件中。假如參數stream為NULL,fflush()會將一切翻開的文件數據更新。
前往值 勝利前往0,掉敗前往EOF,毛病代碼存於errno中。
毛病代碼 EBADF 參數stream 指定的文件未被翻開,或翻開狀況為只讀。其它毛病代碼參考write()。
 
8.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);
}

9.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 /*輸入*/

10.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

12.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);
}

13.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

14.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);
}

15.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

16.ftell(獲得文件流的讀取地位)
相干函數 fseek,rewind,fgetpos,fsetpos
表頭文件 #include<stdio.h>
界說函數 long ftell(FILE * stream);
函數解釋 ftell()用來獲得文件流今朝的讀寫地位。參數stream為已翻開的文件指針。
前往值 當挪用勝利時則前往今朝的讀寫地位,如有毛病則前往-1,errno會寄存毛病代碼。
毛病代碼 EBADF 參數stream有效或可挪動讀寫地位的文件流。
典范 參考fseek()。
 
17.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()。

18.getc(由文件中讀取一個字符)
相干函數 read,fopen,fread,fgetc
表頭文件 #include<stdio.h>
界說函數 int getc(FILE * stream);
函數解釋 getc()用來從參數stream所指的文件中讀取一個字符。若讀到文件尾而有數據時便前往EOF。固然getc()與fgetc()感化雷同,但getc()為宏界說,非真實的函數挪用。
前往值 getc()會前往讀取到的字符,若前往EOF則表現到了文件尾。
典范 參考fgetc()。
 
19.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 /*輸入*/

20.gets(由尺度輸出裝備內讀進一字符串)
相干函數 fopen,fread,fscanf,fgets
表頭文件 #include<stdio.h>
界說函數 char * gets(char *s);
函數解釋 gets()用來從尺度裝備讀入字符並存到參數s所指的內存空間,直到湧現換行字符或讀到文件尾為止,最初加上NULL作為字符串停止。
前往值 gets()若勝利則前往s指針,前往NULL則表現有毛病產生。
附加解釋 因為gets()沒法曉得字符串s的年夜小,必需碰到換行字符或文件尾才會停止輸出,是以輕易形成緩沖溢出的平安性成績。建議應用fgets()代替。
典范 參考fgets()
 
21.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);
}

22.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()。
 
23.putchar(將指定的字符寫到尺度輸入裝備)
相干函數 fopen,fwrite,fscanf,fputc
表頭文件 #include<stdio.h>
界說函數 int putchar (int c);
函數解釋 putchar()用來將參數c字符寫到尺度輸入裝備。
前往值 putchar()會前往輸入勝利的字符,即參數c。若前往EOF則代表輸入掉敗。
附加解釋 putchar()非真正函數,而是putc(c,stdout)宏界說。
典范 參考getchar()。
 
24.rewind(重設文件流的讀寫地位為文件開首)
相干函數 fseek,ftell,fgetpos,fsetpos
表頭文件 #include<stdio.h>
界說函數 void rewind(FILE * stream);
函數解釋 rewind()用來把文件流的讀寫地位移至文件開首。參數stream為已翻開的文件指針。此函數相當於挪用fseek(stream,0,SEEK_SET)。
前往值
典范 參考fseek()

25.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)
前往值
 
26.setbuffer(設置文件流的緩沖區)
相干函數 setlinebuf,setbuf,setvbuf
表頭文件 #include<stdio.h>
界說函數 void setbuffer(FILE * stream,char * buf,size_t size);
函數解釋 在翻開文件流後,讀取內容之前,挪用setbuffer()可用來設置文件流的緩沖區。參數stream為指定的文件流,參數buf指向自定的緩沖區肇端地址,參數size為緩沖區年夜小。
前往值

27.setlinebuf(設置文件流為線性緩沖區)
相干函數 setbuffer,setbuf,setvbuf
表頭文件 #include<stdio.h>
界說函數 void setlinebuf(FILE * stream);
函數解釋 setlinebuf()用來設置文件流以換行動根據的無緩沖IO。相當於挪用:setvbuf(stream,(char * )NULL,_IOLBF,0);請參考setvbuf()。
前往值

28.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。
前往值

29.ungetc(將指定字符寫回文件流中)
相干函數 fputc,getchar,getc
表頭文件 #include<stdio.h>
界說函數 int ungetc(int c,FILE * stream);
函數解釋 ungetc()將參數c字符寫回參數stream所指定的文件流。這個寫回的字符會由下一個讀取文件流的函數獲得。
前往值 勝利則前往c 字符,如有毛病則前往EOF。

#include <stdio.h>
#include <stdlib.h>
int main()
{
     FILE *fp = NULL;
     char* str;
     char re;
     int num = 10;
     str = (char*)malloc(100);
     //snprintf(str, 10,"test: %s", "0123456789012345678");
    // printf("str=%s\n", str);
     fp = fopen("/local/test.c","a+");
     if (fp==NULL){
        printf("Fail to open file\n");
     }
//     fseek(fp,-1,SEEK_END);
     num = ftell(fp);
     printf("test file long:%d\n",num);
     fscanf(fp,"%s",str);
     printf("str = %s\n",str);
     printf("test a: %s\n",str);
     while ((re=getc(fp))!=EOF){//getc可以用作fgetc用
        printf("%c",re);
     }
     //fread(str,10,10,fp);
     fgets(str,100,fp);
     printf("test a: %s\n",str);
     sprintf(str,"xiewei test is:%s", "ABCDEFGHIGKMNI");
     printf("str2=%s\n", str);
   //  fprintf(fp,"%s\n",str);
     fwrite(str,2,10,fp);
     num = ftell(fp);
     if(str!=NULL){
        free(str);
     }
     fclose(fp);
     return 0;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved