c語言文件處理函數集下載,c++下載文件函數

本文目錄一覽:

請問C語言對文件的讀取有哪些函數,都有什麼功能?像fseek();fscanf();fread……什麼的

C語言文件操作函數

13.1C語言文件

1,兩種文件存取方式(輸入,輸出方式)

順序存取

直接存取

2,數據的兩種存放形式

文本文件

二進制文件

13.2文件指針

定義文件類型指針變量的一般形式:

FILE *指針變量名;

例如:

FILE *fp1,*fp2;

13.3打開文件

在使用文件之前,需打開文件.在C里使用fopen函數打開文件.格式為:

fopen(文件名,文件使用方式);

此函數返回一個指向FILE類型的指針.如:

FILE *fp;

fp=fopen(“file_1″,”r”);

如果調用成功,fp就指向file_1,否則返回為NULL,所以為了保證文件的正確使用,要進行測試.採用如下語句:

If((fp=fopen(“file_1″,”r”))==NULL)

{

printf(“Cannot open this file\n”);

exit(0);

}

最常用的文件使用方式及其含義如下:

1,”r”.為讀而打開文本文件.(不存在則出錯)

2,”rb”.為讀而打開二進制文件.

3,”w”.為寫而打開文本文件.(若不存在則新建,反之,則從文件起始位置寫,原內容將被覆蓋)

4,”wb”.為寫而打開二進制文件.

5,”a”.為在文件後面添加數據而打開文本文件.(若不存在,則新建;反之,在原文件後追加)

6,”ab”.為在文件後面添加數據而打開一個二進制文件.

最常用的文件使用方式及其含義如下:

7,”r+”.為讀和寫而打開文本文件.(讀時,從頭開始;在寫數據時,新數據只覆蓋所佔的空間,其後不變)

8,”rb+”.為讀和寫而打開二進制文件.只是在隨後的讀寫時,可以由位置函數設置讀和寫的起始位置.

9,”w+”.首先建立一個新文件,進行寫操作,隨後可以從頭開始讀.(若文件存在,原內容將全部消失)

10,”wb+”.功能與”w+”同.只是在隨後的讀寫時,可以由位置函數設置讀和寫的起始位置.

最常用的文件使用方式及其含義如下:

11,”a+”.功能與”a”相同;只是在文件尾部添加新的數據後,可以從頭開始讀.

12,”ab+”.功能與”a+”相同;只是在文件尾部添加新數據之後,可以由位置函數設置開始讀的起始位置.

13.4關閉文件

當文件的讀寫操作完成之後,使用fclose函數關閉文件.格式如下:

fclose(文件指針)

如:fclose(fp);

13.5調用getc(fgetc)和putc(fputc)函數進行輸入和輸出

1,調用putc(或fputc)函數輸出一個字符

調用形式為:

putc(ch,fp);

功能是:將字符ch寫到文件指針fp所指的文件中去.當輸出成功,putc函數返回所輸出的字符;否則,返回一個EOF值.EOF是在stdio.h庫函數文件中定義的符號常量,其值等於-1.

13.5調用getc(fgetc)和putc(fputc)函數進行輸入和輸出

例如:把從鍵盤輸入的文本按原樣輸出到名為file_1.dat文件中,用字符@作為鍵盤輸入結束標誌.

#include

Void main()

{

FILE *fpout;

char ch;

if(fpout=fpopen(“file_1″,”w”)==NULL)

{

printf(“Cannot open this file!\n”);

exit(0);

}

ch=getchar();

while(ch!=’@’)

{ fputc(ch,fpout); ch=getchar(); }

fclose(fpout);

}

2.調用getc(或fgetc)函數輸入一個字符

調用形式為:

ch=getc(pf);

功能是:從pf指定的文件中讀如一個字符,並把它作為函數值返回.

例如:把一個已存在磁盤上的file_1.dat文本文件中的內容,原樣輸出到終端屏幕上.

#include

void main(){

FILE *fpin;

char ch;

if((fpin=fopen(“file_1.dat”,”r”))==NULL)

{ printf(“Cann’t open this file!\n”);exit(0);}

ch=fgetc(fpin);

while (ch!=EOF)

{ putchar(ch); ch=fgetc(fpin);}

fclose(fpin);

}

13.6判斷文件結束函數feof

EOF可以作為文本文件的結束 標誌,但不能作為二進制文件的結束符.feof函數既可以判斷二進制文件,又可以判斷文本文件.

例:編寫程序,用於把一個文本文件(源)複製到另一個文件(目的)中,源文件名和目的文件名由命令行輸入.命令形式如下:

可執行程序名 源文件名 目的文件名

#include

void filecopy(FILE* ,FILE *);

void main(int argc,char *argv[]){

FILE *fpin,*fpout;

if(argc==3)

{ fpin=fopen(argv[1],”r”);

fpout=fopen(argv[2],”w”);

filecopy(fpin,fpout);

fclose(fpin);fclose(fpout);

}

else if(argc3)

printf(“The file names too many!!\n”;

else

printf(“There are no file names for input or output!!\n );

}

void filecopy(FILE *fpin,FILE *fpout)

{

char ch;

ch=getc(fpin);

while(!feof(fpin))

{putc(ch,fpout); ch=getc(fpin);}

}

13.7fscanf函數和fprintf函數

1,fscanf函數

fscanf只能從文本文件中按格式輸入,和scanf函數相似,只不過輸入的對象是磁盤上文本文件中的數據.調用形式為:

fscanf(文件指針,格式控制字符串,輸入項表)

例如:fscanf(fp,”%d%d”,a,b);

fscanf(stdin,”%d%d”,a,b);

等價於scanf(“%d%d”,a,b);

3.fprintf函數

fprintf函數按格式將內存中的數據轉換成對應的字符,並以ASCII代碼形式輸出到文本文件中.Fprintf函數和printf函數相似,只是將輸出的內容按格式存放到磁盤的文本文件中.調用形式如下:

fprintf(文件指針,格式控制字符串,輸出項表)

如:fprintf(fp,”%d %d”,x,y);

以下語句 fprintf(stdout,”%d %d”,x,y)

13.8fgets函數和fputs函數

1,fgets函數

fgets函數用來從文件中讀入字符串.調用形式如下:

fgets(str,n,fp);

函數功能是:從fp所指文件中讀入n-1個字符放入str為起始地址的空間內;如果在未讀滿n-1個字符時,則遇到換行符或一個EOF結束本次讀操作,並已str作為函數值返回.

13.8fgets函數和fputs函數

2,fputs函數

fput函數把字符串輸出到文件中.函數調用形式如下:

fputs(str,fp);

注意:為了便於讀入,在輸出字符串時,應當人為的加諸如”\n”這樣的字符串.

#include stdio.h

#include iostream

int main(int argc, char *argv[])

{

char arr[10] ;

char *ap = “hello!” ;

FILE *fp ;

if ((fp = fopen(“hello.txt”, “wt+”)) == NULL)

{

printf(“error!”) ;

exit(1) ;

}

fputs(ap, fp) ;

rewind(fp) ; //

fgets(arr, 10, fp) ;

printf(“%s\n”, arr) ;

fclose(fp) ;

return 0 ;

}

13.9fread函數和fwrite函數

例如有如下結構體:

struct st{

char num[8];

float mk[5];

}pers[30];

以下循環將把這30個元素中的數據輸出到fp所指文件中.

for(i=0;i30;i++)

fwrite(pers[i],sizeof(struct st),1,fp);

13.9fread函數和fwrite函數

以下語句從fp所指的文件中再次將每個學生數據逐個讀入到pers數組中.

i=0;

fread(pers[i],sizeof(struct st),1,fp);

while(!feof(fp))

{ i++;

fread(pers[i],sizeof(struct st),1,fp);

}

13.10文件定位函數

1,fseek函數

fseek函數用來移動文件位置指針到指定的位置上,接着的讀或寫操作將從此位置開始.函數的調用形式如下:

fseek(pf,offset,origin)

pf:文件指針

offset:以位元組為單位的位移量,為長整形.

origin:是起始點,用來指定位移量是以哪個位置為基準的.

1,fseek函數

位移量的表示方法

標識符 數字 代表的起始點

SEEK_SET 0 文件開始

SEEK_END 2 文件末尾

SEEK_CUR 1 文件當前位置

假設pf已指向一個二進制文件,則;

fseek(pf,30L,SEEK_SET)

fseek(pf,-10L*sizeof(int),SEEK_END)

對於文本文件,位移量必須是0;如:

fseek(pf,0L,SEEK_SET)

fseek(pf,0L,SEEK_END)

2. ftell函數

ftell函數用以獲得文件當前位置指針的位置,函數給出當前位置指針相對於文件開頭的位元組數.如;

long t;

t=ftell(pf);

當函數調用出錯時,函數返回-1L.

我們可以通過以下方式來測試一個文件的長度:

fseek(fp,0L,SEEK_END);

t=ftell(fp);

3.rewind函數

調用形式為:

rewind(pf);

函數沒有返回值.函數的功能是使文件的位置指針回到文件的開頭.

13.10文件應用

在磁盤上的test.txt文件中放有10個不小於2的正整數,用函數調用方式編寫程序.要求實現:

1,在被調函數prime中,判斷和統計10個整數中的素數以及個數.

2,在主函數中將全部素數追加到磁盤文件test.txt的尾部,同時輸出到屏幕上.

#include

#include

Int prime(int a[],int n)

{

int I,j,k=0,flag=0;

for(i=0;i { for(j=2;j if(a[i]%j==0)

{ flag=0; break;}

else flag=1;

if(flag)

{a[k]=a[i];k++;}

}

return k;

}

void main(){

int n,I,a[10];

FILE *fp;

fp=fopen(“test1-2.txt”,”r+”);

for(n=0;n10;n++)

fscanf(fp,”%d”,a[n]);

n=prime(a,n);

fseek(fp,o,2);

for(i=0;i {printf(“%3d”,a[i]);

fprintf(fp,”%3d”,a[i]);

}

fclose(fp);

C語言實現文件管理的庫函數

2.不同集成開發環境下c語言的頭文件和庫函數是否相同?即:我能否將其他2.答案依然是no不同的開發環境會提供不同的庫文件,這些庫文件的實現未必

c語言庫函數 下載

我有點呵呵

函數名: abort

功 能: 異常終止一個進程

用 法: void abort(void);

程序例:

#include stdio.h

#include stdlib.h

int main(void)

{

printf(“Calling abort()\n”);

abort();

return 0; /* This is never reached */

}

函數名: abs

功 能: 求整數的絕對值

用 法: int abs(int i);

程序例:

#include stdio.h

#include math.h

int main(void)

{

int number = -1234;

printf(“number: %d absolute value: %d\n”, number, abs(number));

return 0;

}

函數名: absread, abswirte

功 能: 絕對磁盤扇區讀、寫數據

用 法: int absread(int drive, int nsects, int sectno, void *buffer);

int abswrite(int drive, int nsects, in tsectno, void *buffer);

程序例:

/* absread example */

#include stdio.h

#include conio.h

#include process.h

#include dos.h

int main(void)

{

int i, strt, ch_out, sector;

char buf[512];

printf(“Insert a diskette into drive A and press any key\n”);

getch();

sector = 0;

if (absread(0, 1, sector, buf) != 0)

{

perror(“Disk problem”);

exit(1);

}

printf(“Read OK\n”);

strt = 3;

for (i=0; i80; i++)

{

ch_out = buf[strt+i];

putchar(ch_out);

}

printf(“\n”);

return(0);

}

函數名: access

功 能: 確定文件的訪問權限

用 法: int access(const char *filename, int amode);

程序例:

#include stdio.h

#include io.h

int file_exists(char *filename);

int main(void)

{

printf(“Does NOTEXIST.FIL exist: %s\n”,

file_exists(“NOTEXISTS.FIL”) ? “YES” : “NO”);

return 0;

}

int file_exists(char *filename)

{

return (access(filename, 0) == 0);

}

函數名: acos

功 能: 反餘弦函數

用 法: double acos(double x);

程序例:

#include stdio.h

#include math.h

int main(void)

{

double result;

double x = 0.5;

result = acos(x);

printf(“The arc cosine of %lf is %lf\n”, x, result);

return 0;

}

函數名: allocmem

功 能: 分配DOS存儲段

用 法: int allocmem(unsigned size, unsigned *seg);

程序例:

#include dos.h

#include alloc.h

#include stdio.h

int main(void)

{

unsigned int size, segp;

int stat;

size = 64; /* (64 x 16) = 1024 bytes */

stat = allocmem(size, segp);

if (stat == -1)

printf(“Allocated memory at segment: %x\n”, segp);

else

printf(“Failed: maximum number of paragraphs available is %u\n”,

stat);

return 0;

}

函數名: arc

功 能: 畫一弧線

用 法: void far arc(int x, int y, int stangle, int endangle, int radius);

程序例:

#include graphics.h

#include stdlib.h

#include stdio.h

#include conio.h

int main(void)

{

/* request auto detection */

int gdriver = DETECT, gmode, errorcode;

int midx, midy;

int stangle = 45, endangle = 135;

int radius = 100;

/* initialize graphics and local variables */

initgraph(gdriver, gmode, “”);

/* read result of initialization */

errorcode = graphresult(); /* an error occurred */

if (errorcode != grOk)

{

printf(“Graphics error: %s\n”, grapherrormsg(errorcode));

printf(“Press any key to halt:”);

getch();

exit(1); /* terminate with an error code */

}

midx = getmaxx() / 2;

midy = getmaxy() / 2;

setcolor(getmaxcolor());

/* draw arc */

arc(midx, midy, stangle, endangle, radius);

/* clean up */

getch();

closegraph();

return 0;

}

函數名: asctime

功 能: 轉換日期和時間為ASCII碼

用 法: char *asctime(const struct tm *tblock);

程序例:

#include stdio.h

#include string.h

#include time.h

int main(void)

{

struct tm t;

char str[80];

/* sample loading of tm structure */

t.tm_sec = 1; /* Seconds */

t.tm_min = 30; /* Minutes */

t.tm_hour = 9; /* Hour */

t.tm_mday = 22; /* Day of the Month */

t.tm_mon = 11; /* Month */

t.tm_year = 56; /* Year – does not include century */

t.tm_wday = 4; /* Day of the week */

t.tm_yday = 0; /* Does not show in asctime */

t.tm_isdst = 0; /* Is Daylight SavTime; does not show in asctime */

/* converts structure to null terminated

string */

strcpy(str, asctime(t));

printf(“%s\n”, str);

return 0;

}

函數名: asin

功 能: 反正弦函數

用 法: double asin(double x);

程序例:

#include stdio.h

#include math.h

int main(void)

{

double result;

double x = 0.5;

result = asin(x);

printf(“The arc sin of %lf is %lf\n”, x, result);

return(0);

}

函數名: assert

功 能: 測試一個條件並可能使程序終止

用 法: void assert(int test);

程序例:

#include assert.h

#include stdio.h

#include stdlib.h

struct ITEM {

int key;

int value;

};

/* add item to list, make sure list is not null */

void additem(struct ITEM *itemptr) {

assert(itemptr != NULL);

/* add item to list */

}

int main(void)

{

additem(NULL);

return 0;

}

函數名: atan

功 能: 反正切函數

用 法: double atan(double x);

程序例:

#include stdio.h

#include math.h

int main(void)

{

double result;

double x = 0.5;

result = atan(x);

printf(“The arc tangent of %lf is %lf\n”, x, result);

return(0);

}

函數名: atan2

功 能: 計算Y/X的反正切值

用 法: double atan2(double y, double x);

程序例:

#include stdio.h

#include math.h

int main(void)

{

double result;

double x = 90.0, y = 45.0;

result = atan2(y, x);

printf(“The arc tangent ratio of %lf is %lf\n”, (y / x), result);

return 0;

}

函數名: atexit

功 能: 註冊終止函數

用 法: int atexit(atexit_t func);

程序例:

#include stdio.h

#include stdlib.h

void exit_fn1(void)

{

printf(“Exit function #1 called\n”);

}

void exit_fn2(void)

{

printf(“Exit function #2 called\n”);

}

int main(void)

{

/* post exit function #1 */

atexit(exit_fn1);

/* post exit function #2 */

atexit(exit_fn2);

return 0;

}

函數名: atof

功 能: 把字符串轉換成浮點數

用 法: double atof(const char *nptr);

程序例:

#include stdlib.h

#include stdio.h

int main(void)

{

float f;

char *str = “12345.67”;

f = atof(str);

printf(“string = %s float = %f\n”, str, f);

return 0;

}

函數名: atoi

功 能: 把字符串轉換成長整型數

用 法: int atoi(const char *nptr);

程序例:

#include stdlib.h

#include stdio.h

int main(void)

{

int n;

char *str = “12345.67”;

n = atoi(str);

printf(“string = %s integer = %d\n”, str, n);

return 0;

}

函數名: atol

功 能: 把字符串轉換成長整型數

用 法: long atol(const char *nptr);

程序例:

#include stdlib.h

#include stdio.h

int main(void)

{

long l;

char *str = “98765432”;

l = atol(lstr);

printf(“string = %s integer = %ld\n”, str, l);

return(0);

}

目錄

Null’s

求c語言所有函數庫的下載地址

我有,pdf的

以前網上沒找到,從朋友那拷來的,有意的話留下郵箱

c語言寫入文件的函數

for (i=*p;i*p+1;i++)這一句就錯大了。p還沒有賦值,哪來的*p?所以再沒有往下看。

c語言文件操作相關函數的用法

clearerr(清除文件流的錯誤旗標)

相關函數 feof

表頭文件 #includestdio.h

定義函數 void clearerr(FILE * stream);

函數說明 clearerr()清除參數stream指定的文件流所使用的錯誤旗標。

返回值

 

fclose(關閉文件)

相關函數 close,fflush,fopen,setbuf

表頭文件 #includestdio.h

定義函數 int fclose(FILE * stream);

函數說明 fclose()用來關閉先前fopen()打開的文件。此動作會讓緩衝區內的數據寫入文件中,並釋放系統所提供的文件資源。

返回值 若關文件動作成功則返回0,有錯誤發生時則返回EOF並把錯誤代碼存到errno。

錯誤代碼 EBADF表示參數stream非已打開的文件。

範例 請參考fopen()。

 

fdopen(將文件描述詞轉為文件指針)

相關函數 fopen,open,fclose

表頭文件 #includestdio.h

定義函數 FILE * fdopen(int fildes,const char * mode);

函數說明 fdopen()會將參數fildes 的文件描述詞,轉換為對應的文件指針後返回。參數mode 字符串則代表着文件指針的流形態,此形態必須和原先文件描述詞讀寫模式相同。關於mode 字符串格式請參考fopen()。

返回值 轉換成功時返回指向該流的文件指針。失敗則返回NULL,並把錯誤代碼存在errno中。

範例

#includestdio.h

main()

{

FILE * fp =fdopen(0,」w+」);

fprintf(fp,」%s\n」,」hello!」);

fclose(fp);

}

執行 hello!

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

相關函數 fopen,fgetc,fgets,fread

表頭文件 #includestdio.h

定義函數 int feof(FILE * stream);

函數說明 feof()用來偵測是否讀取到了文件尾,尾數stream為fopen()所返回之文件指針。如果已到文件尾則返回非零值,其他情況返回0。

返回值 返回非零值代表已到達文件尾。

 

fflush(更新緩衝區)

相關函數 write,fopen,fclose,setbuf

表頭文件 #includestdio.h

定義函數 int fflush(FILE* stream);

函數說明 fflush()會強迫將緩衝區內的數據寫回參數stream指定的文件中。如果參數stream為NULL,fflush()會將所有打開的文件數據更新。

返回值 成功返回0,失敗返回EOF,錯誤代碼存於errno中。

錯誤代碼 EBADF 參數stream 指定的文件未被打開,或打開狀態為只讀。其它錯誤代碼參考write()。

 

fgetc(由文件中讀取一個字符)

相關函數 open,fread,fscanf,getc

表頭文件 includestdio.h

定義函數 nt fgetc(FILE * stream);

函數說明 fgetc()從參數stream所指的文件中讀取一個字符。若讀到文件尾而無數據時便返回EOF。

返回值 getc()會返回讀取到的字符,若返回EOF則表示到了文件尾。

範例

#includestdio.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

表頭文件 includestdio.h

定義函數 har * fgets(char * s,int size,FILE * stream);

函數說明 fgets()用來從參數stream所指的文件內讀入字符並存到參數s所指的內存空間,直到出現換行字符、讀到文件尾或是已讀了size-1個字符為止,最後會加上NULL作為字符串結束。

返回值 gets()若成功則返回s指針,返回NULL則表示有錯誤發生。

範例

#includestdio.h

main()

{

char s[80];

fputs(fgets(s,80,stdin),stdout);

}

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

this is a test /*輸出*/

 

fileno(返迴文件流所使用的文件描述詞)

相關函數 open,fopen

表頭文件 #includestdio.h

定義函數 int fileno(FILE * stream);

函數說明 fileno()用來取得參數stream指定的文件流所使用的文件描述詞。

返回值 返迴文件描述詞。

範例

#includestdio.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

表頭文件 #includestdio.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()後請作錯誤判斷及處理。

範例

#includestdio.h

main()

{

FILE * fp;

fp=fopen(「noexist」,」a+」);

if(fp= =NULL) return;

fclose(fp);

}

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

相關函數 fopen,fwrite,fscanf,putc

表頭文件 #includestdio.h

定義函數 int fputc(int c,FILE * stream);

函數說明 fputc 會將參數c 轉為unsigned char 後寫入參數stream 指定的文件中。

返回值 fputc()會返回寫入成功的字符,即參數c。若返回EOF則代表寫入失敗。

範例

#includestdio.h

main()

{

FILE * fp;

char a[26]=」abcdefghijklmnopqrstuvwxyz」;

int i;

fp= fopen(「noexist」,」w」);

for(i=0;i26;i++)

fputc(a,fp);

fclose(fp);

}

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

相關函數 fopen,fwrite,fscanf,fputc,putc

表頭文件 #includestdio.h

定義函數 int fputs(const char * s,FILE * stream);

函數說明 fputs()用來將參數s所指的字符串寫入到參數stream所指的文件內。

返回值 若成功則返回寫出的字符個數,返回EOF則表示有錯誤發生。

範例 請參考fgets()。

fread(從文件流讀取數據)

相關函數 fopen,fwrite,fseek,fscanf

表頭文件 #includestdio.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數目。

附加說明

範例

#includestdio.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;inmemb;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

表頭文件 #includestdio.h

定義函數 FILE * freopen(const char * path,const char * mode,FILE * stream);

函數說明 參數path字符串包含欲打開的文件路徑及文件名,參數mode請參考fopen()說明。參數stream為已打開的文件指針。Freopen()會將原stream所打開的文件流關閉,然後打開參數path的文件。

返回值 文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。

範例

#includestdio.h

main()

{

FILE * fp;

fp=fopen(「/etc/passwd」,」r」);

fp=freopen(「/etc/group」,」r」,fp);

fclose(fp);

}

fseek(移動文件流的讀寫位置)

相關函數 rewind,ftell,fgetpos,fsetpos,lseek

表頭文件 #includestdio.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()來取得目前讀寫的位置。

範例

#includestdio.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

表頭文件 #includestdio.h

定義函數 long ftell(FILE * stream);

函數說明 ftell()用來取得文件流目前的讀寫位置。參數stream為已打開的文件指針。

返回值 當調用成功時則返回目前的讀寫位置,若有錯誤則返回-1,errno會存放錯誤代碼。

錯誤代碼 EBADF 參數stream無效或可移動讀寫位置的文件流。

範例 參考fseek()。

 

fwrite(將數據寫至文件流)

相關函數 fopen,fread,fseek,fscanf

表頭文件 #includestdio.h

定義函數 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);

函數說明 fwrite()用來將數據寫入文件流中。參數stream為已打開的文件指針,參數ptr 指向欲寫入的數據地址,總共寫入的字符數以參數size*nmemb來決定。Fwrite()會返回實際寫入的nmemb數目。

返回值 返回實際寫入的nmemb數目。

範例

#includestdio.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

表頭文件 #includestdio.h

定義函數 int getc(FILE * stream);

函數說明 getc()用來從參數stream所指的文件中讀取一個字符。若讀到文件尾而無數據時便返回EOF。雖然getc()與fgetc()作用相同,但getc()為宏定義,非真正的函數調用。

返回值 getc()會返回讀取到的字符,若返回EOF則表示到了文件尾。

範例 參考fgetc()。

 

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

相關函數 fopen,fread,fscanf,getc

表頭文件 #includestdio.h

定義函數 int getchar(void);

函數說明 getchar()用來從標準輸入設備中讀取一個字符。然後將該字符從unsigned char轉換成int後返回。

返回值 getchar()會返回讀取到的字符,若返回EOF則表示有錯誤發生。

附加說明 getchar()非真正函數,而是getc(stdin)宏定義。

範例

#includestdio.h

main()

{

FILE * fp;

int c,i;

for(i=0li5;i++)

{

c=getchar();

putchar(c);

}

}

執行 1234 /*輸入*/

1234 /*輸出*/

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

相關函數 fopen,fread,fscanf,fgets

表頭文件 #includestdio.h

定義函數 char * gets(char *s);

函數說明 gets()用來從標準設備讀入字符並存到參數s所指的內存空間,直到出現換行字符或讀到文件尾為止,最後加上NULL作為字符串結束。

返回值 gets()若成功則返回s指針,返回NULL則表示有錯誤發生。

附加說明 由於gets()無法知道字符串s的大小,必須遇到換行字符或文件尾才會結束輸入,因此容易造成緩衝溢出的安全性問題。建議使用fgets()取代。

範例 參考fgets()

 

mktemp(產生唯一的臨時文件名)

相關函數 tmpfile

表頭文件 #includestdlib.h

定義函數 char * mktemp(char * template);

函數說明 mktemp()用來產生唯一的臨時文件名。參數template所指的文件名稱字符串中最後六個字符必須是XXXXXX。產生後的文件名會借字符串指針返回。

返回值 文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno中。

附加說明 參數template所指的文件名稱字符串必須聲明為數組,如:

char template[ ]=」template-XXXXXX」;

不可用char * template=」template-XXXXXX」;

範例

#includestdlib.h

main()

{

char template[ ]=」template-XXXXXX」;

mktemp(template);

printf(「template=%s\n」,template);

}

 

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

相關函數 fopen,fwrite,fscanf,fputc

表頭文件 #includestdio.h

定義函數 int putc(int c,FILE * stream);

函數說明 putc()會將參數c轉為unsigned char後寫入參數stream指定的文件中。雖然putc()與fputc()作用相同,但putc()為宏定義,非真正的函數調用。

返回值 putc()會返回寫入成功的字符,即參數c。若返回EOF則代表寫入失敗。

範例 參考fputc()。

 

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

相關函數 fopen,fwrite,fscanf,fputc

表頭文件 #includestdio.h

定義函數 int putchar (int c);

函數說明 putchar()用來將參數c字符寫到標準輸出設備。

返回值 putchar()會返回輸出成功的字符,即參數c。若返回EOF則代表輸出失敗。

附加說明 putchar()非真正函數,而是putc(c,stdout)宏定義。

範例 參考getchar()。

 

rewind(重設文件流的讀寫位置為文件開頭)

相關函數 fseek,ftell,fgetpos,fsetpos

表頭文件 #includestdio.h

定義函數 void rewind(FILE * stream);

函數說明 rewind()用來把文件流的讀寫位置移至文件開頭。參數stream為已打開的文件指針。此函數相當於調用fseek(stream,0,SEEK_SET)。

返回值

範例 參考fseek()

setbuf(設置文件流的緩衝區)

相關函數 setbuffer,setlinebuf,setvbuf

表頭文件 #includestdio.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

表頭文件 #includestdio.h

定義函數 void setbuffer(FILE * stream,char * buf,size_t size);

函數說明 在打開文件流後,讀取內容之前,調用setbuffer()可用來設置文件流的緩衝區。參數stream為指定的文件流,參數buf指向自定的緩衝區起始地址,參數size為緩衝區大小。

返回值

setlinebuf(設置文件流為線性緩衝區)

相關函數 setbuffer,setbuf,setvbuf

表頭文件 #includestdio.h

定義函數 void setlinebuf(FILE * stream);

函數說明 setlinebuf()用來設置文件流以換行為依據的無緩衝IO。相當於調用:setvbuf(stream,(char * )NULL,_IOLBF,0);請參考setvbuf()。

返回值

setvbuf(設置文件流的緩衝區)

相關函數 setbuffer,setlinebuf,setbuf

表頭文件 #includestdio.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

表頭文件 #includestdio.h

定義函數 int ungetc(int c,FILE * stream);

函數說明 ungetc()將參數c字符寫回參數stream所指定的文件流。這個寫回的字符會由下一個讀取文件流的函數取得。

返回值 成功則返回c 字符,若有錯誤則返回EOF。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/307302.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-02 18:06
下一篇 2025-01-02 18:06

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字符串操作中,capitalize函數常常被用到,這個函數可以使字符串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常問題的解決

    本文旨在解決vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常的問題,提供完整的代碼示例供參考。 一、分析問題 首先,需了解vue中下載文件的情況。一般情況下,我們…

    編程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 為什麼用cmd運行Java時需要在文件內打開cmd為中心

    在Java開發中,我們經常會使用cmd在命令行窗口運行程序。然而,有時候我們會發現,在運行Java程序時,需要在文件內打開cmd為中心,這讓很多開發者感到疑惑,那麼,為什麼會出現這…

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • 單片機打印函數

    單片機打印是指通過串口或並口將一些數據打印到終端設備上。在單片機應用中,打印非常重要。正確的打印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的打印數據可以幫助我們快速…

    編程 2025-04-29

發表回復

登錄後才能評論