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

C語言文件操作

編輯:關於C語言

文件的打開與關閉

首先要定義一個文件指針類型,格式為 FILE *文件指針名; ;

FILE *fp;  //fp就是定義的文件指針

●打開文件fopen()函數,格式: fp = fopen("文件名", "打開方式");

fp = fopen("c:\\myfile", "r");  //打開方式下文會講到

文件名中不允許直接使用路徑描述符 "\",必須用轉義字符的形式 "\\"。"\\" 中第一個 "\" 是轉義字符,第二個表示路徑描述符。

●關閉文件fcolse()函數,格式: fclose(文件指針);

fclose(fp);

功能:正常完成關閉文件操作時fclose返回0,否則返回EOF(值為-1),表示有錯誤發生。

●打開文件的方式:

共有12種,由r(read), w(write), a(append), b(binary), +(read/write)五個字符組合而成。

"r", "w", "a", "r+", "w+", "a+"  :這六種打開文本文件

 "rb", "wb", "ab", "rb+", "wb+", "ab+"  :這六種打開二進制文件

"r" 打開一個文本文件,可以讀取文件 "w" 打開一個文本文件,可以寫入文件,先將文件的長度截為0。如果該文件不存在則先創建  "a" 打開一個文本文件,可以寫入文件,向已有文件的尾部追加內容,如果該文件不存在則先創建 "r+" 打開一個文本文件,可以進行更新(讀取和寫入),也即可以讀取和寫入文件 "w+" 打開一個文本文件,可以進行更新(讀取和寫入),如果該文件存在則首先將其長度截為0,如果該文件不存在則先創建 "a+" 打開一個文本文件,可以進行更新(讀取和寫入),向已有文件的尾部追加內容,如果該文件不存在則先創建;可以讀取整個文件,但寫入時只能追加內容。 "rb", "wb", "ab", "rb+", "wb+", "ab+", "r+b", "w+b", "a+b" 與前面的模式相似,只是使用二進制而非文本模式打開文件

注意:如果用"w"模式打開任意一個文件,文件內容將刪除,以便程序以一個空文件開始操作。

●文件結束的判定feof()函數,格式: feof(文件指針)

這裡舉一個例子幫助理解:

while(!feof(fp))   //我們已在文件的末尾加上結束標志-1
{   c = fgetc(fp); 
    print("當到文件尾時,此段文字不顯示");
}
//此段程序的含義是:當為!feof(fp)為1,從當前位置讀入一個字節的數據賦給字符型變量c,指當遇到文件結束標志時,feof(fp)的值為1,feof(fp)為0,循環結束

feof()函數功能:測試文件指針所指向的文錦啊內部讀寫位置指針是否到達文件尾。當文件結束時返回1,否則返回0。

文件的讀寫

1.字符,字符串的讀寫

寫字符函數fputc,功能:把一個字符寫入此盤文件中,若輸出成功,則返回輸出的字符,否則返回EOF。格式:

fputc(ch, fp);   //將字符ch的值輸出到fp所指向的文件中

ch:要輸出的字符,可以是字符常量,也可以是字符變量。

讀字符函數fgetc,功能:從指定文件讀入一個字符,該文件必須是以讀或讀寫方式打開的,若讀取成功返回讀取的字符,否則返回EOF。格式:

ch = fgetc(fp);  //讀取成功返回字符賦值給ch

寫字符串函數fputs,格式: fputs("字符串", 文件指針);     功能:向指定的文件寫入一串字符,寫入成功返回0,否則返回非0值。

fputs("Welcome to my blog", fp);

注意:fputs函數將寫入文件的字符串中的空字符去掉,ptus函數將空字符換成換行字符輸出。

讀字符串函數,格式: fgets(字符串, n, fp);      功能:從fp指向的文件讀入n-1個字符存放第一個參數中,如果遇到換行符或EOF,則結束。

fgets(str, n, fp); //str 為字符數組。從fp指向的文件讀入n-1個字符存放到str數組中

注意:讀入字符串後在最後加一個 '\0' 字符,fgets函數返回的返回值為字符串的首地址。

2.數據塊的讀寫

數據塊寫文件函數fwrite(),格式:

fwrite(buffer, size, count, fp);

buffer:是一個指針,用來指出帶輸出數據的地址。

size:每次要寫的字節數

count:寫入多少個size大小的數據項

注意:完成寫操作(fwrite())後必須關閉文件(fclose())

數據塊的讀文件函數fread(),格式:

fread(buffer, size, count, fp);

count:讀入多少個size大小的數據項

3.格式化讀/寫文件函數

讀文件fprintf(),格式: fprintf(文件指針,"格式控制",輸出列表);

fprintf(fp,"%d, %d",a, b);  //將a,b寫入fp指向的文件中

注意:fprintf()函數總是將輸出項在內存中的表示形式按指定的格式轉換成字符串形式,再寫入到指定的文件中。

寫文件fscanf(),格式: fscanf(文件指針,"格式控制",地址列表);

fprintf(fp,"%d, %d",&a, &b);  //將fp指向的文件中的數據讀出並存放於a,b

注意:fscanf()函數從文件中讀出的數據一定是按字符串形式(文本形式)存在的。

文件定位

●rewind()函數,格式: rewind(文件指針);     功能:使文件指針的讀寫位置重新返回到文件的開頭。

rewind(fp);

●fseek()函數,格式: fseek(文件指針, 位移量w, 起始點s);     功能:使文件指針移到距起始點偏移w個字節處。

fseek(fp, 2, 0);  //使文件指針移到距起始點0偏移2個字節數

w:當w為正數時表示向文件尾方向移動,為負數時表示向文件頭移動,為0表示不移動。 s:可以為0,1,2;s=0表示文件頭,s=0表示當前位置,s=0表示文件末尾。   ●ftell()函數,格式: ftell(文件指針);     功能:得到流式文件中的當前位置,用相對與文件開頭的位移量來表示。若ftell()函數返回-1L表示出錯。

i = ftell(fp); //存放當前位置給變量i
if(i == -1L)
    printf("error\n"); //若調用的函數出錯(如不存在此文件),則輸出ERROR

文件的檢測

常用的文件檢測函數有兩個 ferror()和clearerr() ferror()函數,功能:若ferror()函數的返回值為0,則表示未出錯,非0表示出錯。格式:

ferror(fp)

clearerr()函數,功能:使文件錯誤標志和文件結束標志置為0。格式:

clearerr(fp)

來源:http://www.cnblogs.com/libra-yong/p/6250133.html

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