文件的打開 (fopen函數(shù))
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于網(wǎng)站建設(shè)、網(wǎng)站制作、靜安網(wǎng)絡推廣、微信平臺小程序開發(fā)、靜安網(wǎng)絡營銷、靜安企業(yè)策劃、靜安品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們大的嘉獎;創(chuàng)新互聯(lián)公司為所有大學生創(chuàng)業(yè)者提供靜安建站搭建服務,24小時服務熱線:13518219792,官方網(wǎng)址:www.cdcxhl.comfopen函數(shù)用來打開一個文件,其調(diào)用的一般形式為: 文件指針變量名 = fopen (文件名, 使用文件方式); 其中: "文件指針名"必須是被說明為FILE 類型的指針變量; "文件名" 是被打開文件的文件名 "使用文件方式" 是指文件的類型和操作要求 "文件名" 是字符串常量或字符串數(shù)組文件的關(guān)閉函數(shù)(fclose函數(shù))
文件一旦使用完畢,應用關(guān)閉文件函數(shù)把文件關(guān)閉,以避免文件的數(shù)據(jù)丟失等錯誤 fclose 函數(shù)調(diào)用的一般形式是: fclose(文件指針); 注意:正常完成關(guān)閉文件操作時,fclose函數(shù)返回值為0 .如返回非零值則表示有錯誤發(fā)生 如果文件寫操作時,沒有進行關(guān)閉,可能會導致文件寫入失敗例:
操作文件的步驟: 1) 引入頭文件 stdio.h 2) 建立文件指針 FILE *fp = NULL; 3) 打開文件 fopen(文件名,操作方式); fp=fopen("a.txt","r");//r 是操作方式 //如果打開成功,會返回文件的首地址 失敗,會返回NULL; 4) 操作文件 5) 關(guān)閉文件 fclose(文件指針);文件的使用方式:
r: 打開一個已經(jīng)存在的文件,準備從文件中讀取數(shù)據(jù).不能向文件寫數(shù)據(jù) w: 創(chuàng)建一個新文件,準備向文件寫入數(shù)據(jù).不能從文件中讀取數(shù)據(jù),如果文件已經(jīng)存在,這個文件會被覆蓋 a: 打開一個已存在的文件,準備在文件尾部追加數(shù)據(jù).不能從文件中讀取數(shù)據(jù),如果文件不存在,則創(chuàng)建這個文件準備寫入數(shù)據(jù) r+: 打開一個已存在的文件,準備讀寫.即可以讀取數(shù)據(jù),也可以寫入數(shù)據(jù) w+: 創(chuàng)建一個新文件,準備讀寫,如果文件已存在,則覆蓋文件 a+: 等價于a,但可以從文件中讀取數(shù)據(jù) t: 打開一個文本文件 b: 打開一個二進制文件文件的注意事項:
1)文件使用方式由 r、w、a、t、b和+ 六個字符拼成,各字符的含義是: r (read) :讀 w (write) :寫 a (append):追加 t (text): 文本文件,可省略不寫 b (banary): 二進制文件 + : 讀和寫 2) 凡用"r" 打開一個文件時,該文件必須已經(jīng)存在,且只能從文件讀出 3) 用"w" 打開的文件只能向該文件寫入.若打開的文件不存在,則以指定的文件名建立該文件,若打開的文件已經(jīng)存在,則將該文件刪去,重建一個新文件 4) 若要向一個已存在的文件追加新的信息,只能用"a"方式打開文件.如果文件不存在,也會自動幫我們創(chuàng)建 5) 在打開一個文件時,如果出錯,fopen將返回一個空指針值NULL。 在程序中可以用這一信息來判別是否完成打開文件的工作,并作相應的處理.因此常用以下程序段打開文件: 例如: //定義文件指針 FILE *fp = fopen("a.txt","r"); if(fp!=NULL){ //文件打開成功 }else{ //文件打開失敗 printf("文件讀取失敗!按任意鍵退出~"); getch();//等待用戶輸入一個字符后,再退出 exit(1);//程序退出 } 這段程序的意義是,如果返回的指針為空,表示不能打開a.txt文件,則給出提示信息,下一行g(shù)etch()的功能是從鍵盤輸入一個字符,但不在屏幕上顯示.在這里,該行的作用是等待,只有當用戶從鍵盤敲任一建時,程序才會繼續(xù)執(zhí)行,因此用戶可利用這個等待時間閱讀出錯提示.敲鍵后執(zhí)行exit(1)退出程序 6) 把一個文本文件讀取內(nèi)存時,要將ASCII碼轉(zhuǎn)換成二進制碼,而把文件以文本方式寫入磁盤時,也要把二進制碼轉(zhuǎn)換成ASCII碼,因此文本文件的讀寫要花費較多的轉(zhuǎn)換時間.對二進制文件的讀寫不存在這種轉(zhuǎn)換 7) 標準輸入文件(鍵盤),標準輸出文件(顯示器),標準出錯輸出(出錯信息)是由系統(tǒng)打開的,可直接使用字節(jié)讀寫函數(shù):fgetc和fputc
一次讀取一個字節(jié) 讀取到EOF 表示到達了文件末尾則讀取結(jié)束字符串讀寫函數(shù):fgets 和 fputs
fputs有個返回值 ,返回的內(nèi)容代表當前寫入的字數(shù) fgets("數(shù)組名稱","讀取的字節(jié)數(shù)","文件指針"); 注意: 1) fgets讀取的時候,當文件內(nèi)容讀取完畢后,會給字符串加上結(jié)束符 2) fgets讀取的時候,遇到 或者EOF,讀取結(jié)束數(shù)據(jù)塊讀寫函數(shù) fread 和 fwrite
C語言還提供了用于整塊數(shù)據(jù)的讀寫函數(shù).可用來讀寫一組數(shù)據(jù),如一個數(shù)組元素,一個結(jié)構(gòu)變量的值等 讀數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為: fread(buffer,size,count,fp); 寫數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為: fwrite(buffer,size,count,fp); 其中: buffer:是一個指針,在fread函數(shù)中,它表示存放輸入函數(shù)的首地址.在fwrite函數(shù)中,它表示存放輸出數(shù)據(jù)的首地址 size: 表示函數(shù)塊的字節(jié)數(shù) count: 表示要讀寫的數(shù)據(jù)塊塊數(shù) fp:表示文件指針格式化寫入 fprintf 和 fscanf
//使用fprintf函數(shù),格式化寫入數(shù)據(jù)到文件中 fprintf(fp,"%d#%d",a,b); //以特定的格式寫入數(shù)據(jù) fscanf(fp,"%d#%d",a,b);文件的隨機讀寫實現(xiàn)
實現(xiàn)隨機讀寫的關(guān)鍵是按要求移動位置指針,這成為文件的定位 移動文件內(nèi)部位置指針的函數(shù)主要由兩個 ,即 rewind() 和 fseek() fseek函數(shù) 和 rewind函數(shù) rewind(文件指針) 把文件指針重新制定文件的首位置 fseek函數(shù) 格式 : fseek(文件指針,位移量,起始點); 文件指針: 指向被移動的文件 位移量: 表示移動的字節(jié)數(shù),要求位移量是long型數(shù)據(jù),以便在文件長度大于64KB是不會報錯,當用常量表示位移量時,要求加后綴 "L" 起始點: 表示從何處開始計算位移量,規(guī)定的起始點有三種:文件首,當前位置 和文件尾 文件首 SEEK_SET 數(shù)字 0 當前位置 SEEK_CUR 數(shù)字 1 文件末尾 SEEK_END 數(shù)字 2 例如: fseek(fp,100L,0); 其意義是把位置指針移到離文件首100個字節(jié)處 注意: fseek函數(shù)一般用于二進制文件,在文本文件中由于要進行轉(zhuǎn)換,故往往計算的位置會出現(xiàn)錯誤 文件結(jié)束檢測函數(shù) feof函數(shù) 格式: feof(文件指針); 功能: 判斷文件是否處于文件結(jié)束位置,如文件結(jié)束,則返回為1,否則為0 注意: 這個方法會多執(zhí)行一次,一般選 EOF 檢測錯誤信息: ferror 函數(shù) ferror(文件指針); 文件出錯標志和文件結(jié)束標志置0函數(shù) clearerr函數(shù)調(diào)用格式: clearerr(文件指針) 作用: 本函數(shù)用于清除出錯標志和文件結(jié)束標志,使它們?yōu)?值