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

C語言文件操作

編輯:關於C語言

1. fopen fclose
 1.1 FILE * fopen(const char * path,const char * mode)
(1) return

文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。
所以測試文件是否打開可以這樣:
if( fp == NULL )
do_error();

(2) Mode:
r (讀)w(寫)a(追加)
b(二進制操作)
+(允許讀寫)

r 以只讀方式打開文件,該文件必須存在。
r+ 以可讀寫方式打開文件,該文件必須存在。
rb+ 讀寫打開一個二進制文件,允許讀寫數據。
rw+ 讀寫打開一個文本文件,允許讀和寫。
w 打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)
a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。 (原來的EOF符不保留)
wb 只寫打開或新建一個二進制文件;只允許寫數據。
wb+ 讀寫打開或建立一個二進制文件,允許讀和寫。
ab+ 讀寫打開一個二進制文件,允許讀或在文件末追加數據。
at+ 打開一個叫string的文件,a表示append,就是說寫入處理的時候是接著原來文件已有內容寫入,不是從頭寫入覆蓋掉,t表示打開文件的類型是文本文件,+號表示對文件既可以讀也可以寫。

 

 

1.2 fclose( FILE* fp )
與fopen配對,當你yongfopen打開文件後,必須使用fclose關閉文件。

 


2. fgetc fputc  字符
2.1 int fgetc(FILE *stream)
函數從輸入流的當前位置返回一個字符,並將文件指針指示器移到下一個字符處,如果已到文件尾,函數返回EOF,此時 表示本次操作結束。

 

[cpp]
<SPAN style="FONT-SIZE: 14px">while( (ch = fgetc(fp)) != EOF ) 

do_by_char(); 
}</SPAN> 

while( (ch = fgetc(fp)) != EOF )
{
do_by_char();
}


2.2 int fputc(int ch,FILE *stream)
函數完成將字符ch的值寫入所指定的流文件的當前位置處,並將文件指針後移一位。
fputc()函數的返回值是所寫入字符的值,出錯時返回EOF。


2.3 getchar putchar

[cpp]
<SPAN style="FONT-SIZE: 14px">#define getchar() getc( stdin ) 
#define putchar( c )  putc( (c), stdout )</SPAN> 

#define getchar() getc( stdin )
#define putchar( c )  putc( (c), stdout )


3. fgets fputs  行

3.1 char *fgets(char *line,int line_size,FILE *fp)
從流文件fp中讀取至多line_size-1個字符,並把它們放入line指向的字符數組中。讀取字符直到遇見回車符或EOF (文件結束符)為止,或讀入了所限定的字符數。


[cpp]
<SPAN style="FONT-SIZE: 14px">while( fgets(str, 128, fp) != NULL ) 

do_by_line(); 
}</SPAN> 

while( fgets(str, 128, fp) != NULL )
{
do_by_line();
}

 

[cpp]
<SPAN style="FONT-SIZE: 14px">char* fgets( char *s, int n, FILE *fp ) 

    register int c; 
    register char *cs; 
     
    cs = s; 
    while( --n > 0 && ( c=getc(fp) ) != EOF ) 
        if( (*cs++ = c) == '\n' ) 
            break; 
             
    *cs = '\0'; 
     
    return ( c == EOF && cs == s )? NULL : s; 
}</SPAN> 

char* fgets( char *s, int n, FILE *fp )
{
 register int c;
 register char *cs;
 
 cs = s;
 while( --n > 0 && ( c=getc(fp) ) != EOF )
  if( (*cs++ = c) == '\n' )
   break;
   
 *cs = '\0';
 
 return ( c == EOF && cs == s )? NULL : s;
}

 

3.2 int fputs(char *line,FILE *fp)
操作成功時,函數返回0值,失敗返回非零值。


[cpp]
<SPAN style="FONT-SIZE: 14px">int fputs( char *line , FILE *fp ) 

    int c ; 
    while( c = *s++ ) 
        putc( c, fp ); 
    return ferror( fp )? EOF : 0; 
}</SPAN> 

int fputs( char *line , FILE *fp )
{
 int c ;
 while( c = *s++ )
  putc( c, fp );
 return ferror( fp )? EOF : 0;
}


4. fscanf fprintf 格式化

4.1· int fscanf(FILE *stream,char *format,arg_list)
與scanf用法相同

4.2 int fprintf(FILE *stream,char *format,arg_list)
與printf用法相同


[cpp]
<SPAN style="FONT-SIZE: 14px">while( fscanf( fp, "%s%d", str, &i ) != EOF ) 

    fprintf( stdout, "%s \t %d", str, i ); 
}</SPAN> 

while( fscanf( fp, "%s%d", str, &i ) != EOF )
{
 fprintf( stdout, "%s \t %d", str, i );
}

 

5. fread fwrite 塊
5.1 int fread(void *buf,int size,int count,FILE *stream)
fread()函數從stream 指向的流文件讀取count (字段數)個字段,每個字段為size(字段長度)個字符長,並把它們放到b u f(緩沖區)指向的字符數組中。

fread()函數返回實際已讀取的字段數。若函數調用時要求讀取的字段數超過文件存放的字段數,則出錯或已到文件尾,實際在操作時應注意檢測。


5.2 int fwrite(void *buf,int size,int count,FILE *stream)
函數從buf(緩沖區)指向的字符數組中,把count(字段數)個字段寫到stream所指向的流中,每個字段為size個字符長, 函數操作成功時返回所寫字段數。關於成塊的文件讀寫,在創建文件時只能以二進制文件格式創建。

 

[cpp]
<SPAN style="FONT-SIZE: 14px">while ( !feof( fp ) ) 

    fread( str, sizeof(int), 127, fp ); 
}</SPAN> 

while ( !feof( fp ) )
{
 fread( str, sizeof(int), 127, fp );
}


6. fseek
int fseek( FILE *fp, long offset , mode )

mode :

SEEK_SET : 0 ——開頭

SEEK_CUR: 1——當前

SEEK_END: 2——結尾

 

 

 

 

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