C語言檔案輸入輸出函數筆記

來源:互聯網
上載者:User

        發現最近寫的程式總是要用到檔案操作,所以把C語言與檔案輸入輸出有關的函數複習一下。

 

   C語言是通過將一個檔案類型指標與檔案關聯起來來對檔案進行開啟、關閉、輸入、輸出。

檔案類型為FILE(實際上是一個結構體)。定義一個檔案指標為FILE *fp;就可以將fp和某個檔案關聯起來進行操作了。例如要開啟一個檔案:

                                                FILE *fp;

                                                            fp=fopen("filename",“開啟檔案”);//fopen的傳回值為NULL或指向檔案的指標

                                          或者直接FILE *fp=("filename","開啟檔案");

如果要重新導向只需將指標fp和另一個檔案關聯。意思是可用一個檔案指標操作多個檔案。

檔案使用完後要及時關閉。這是個好習慣。關閉函數為fclose(fp);這樣fp就不在和之前指向的檔案關聯了。

 

1.判斷檔案是否開啟成功:

    判斷檔案是否開啟成功可用fopen的傳回值if((fp=fopen("filename","r"))==NULL)則開啟失敗。

 

2.判斷檔案是否結束:

判斷ASCII檔案是否結束fgetc()會返回結束標誌EOF(即-1)由於二進位檔案資料會出現-1所以必須用函數feof(fp)判斷,feof(fp)==1則已結束。所以讀入一個檔案可以while(!feof(fp)){c=fgetc(in); ...}

 

3.單個字元的輸入輸出:fgetc()和fputc()
ch=fgetc(fp);fp為檔案指標,且fgetc()不會忽略空格和斷行符號符,只能用於讀入字元。
相應的fputc(ch,fp);向檔案輸出字元時也不會忽略空格,斷行符號符
因為fgetc()返回字元所以fgetc()和fputc()通常嵌套使用:fputc(fgetc(in),out)。

 

fputc()的傳回值為輸入的字元或EOF(-1)(失敗的情況下)

fgetc()的傳回值為讀入的字元(包括檔案結束標誌EOF(-1))

 

4.資料區塊的輸入輸出:fread(buff,size,count,fp)和發fwrite(buffer,size,count,fp)
buffer是一個指標,對於fread,它是讀入資料的存放地址,對於發fwrite它是要輸出資料的地址,
size是指要讀寫的位元組數,count是要進行讀寫多少個size位元組的資料項目。

 

如果成功,fread和fwrite都返回成功輸入和讀取的資料區塊個數有可能比count小;不是返回size。

 

注意:fread參數buffer指向的空間必須大於或等於要讀入的資料區塊大小。

         fread和fwrite一般用於二進位檔案的輸入輸出。用於ASCII檔案字元發生轉換的情況下可能出現與原設想的情況不同。

 

5.putw()和getw()用來對磁碟檔案讀寫一個整數。

例如putw(10,fp);//傳回值為輸出的數字(int)

int i=getw(fp);//失敗則返回-1

但注意putw()和getw()都是按二進位輸入輸出的。

所以如果你用putw()輸入資料到檔案後以文本的方式開啟看到的將都是亂碼。

同樣如果你在文字檔中輸入了數字並儲存,用getw()來讀入的話讀入的結果並不是你想象的那樣。因為它是按二進位讀的。

另外putw()和getw()不是標準庫函數。

 

6.格式化輸入輸出fscanf()和fprintf();

這兩個函數和標準輸入輸出scanf()和printf()類似,沒啥好說的。

fscanf(檔案指標,格式化字串,輸入序列);

fprintf(檔案指標,格式化字串,輸出序列);

注意:fscanf()和fprintf()只針對ASSCII檔案,如果用他們處理用二進位格式開啟的檔案,它們還是按照ASSCII方式工作。要處理二進位檔案可以用fread()和fwrite().

 

7.字串輸入輸出fgets()和fputs()

fgets(),fputs()和gets(),puts()類似

不過fgets()有三個參數fgets(str,n,fp)

str為用來儲存讀入內容的字元數組或char*指標。n為要讀入字元的個數。fp為檔案指標。

n:只從檔案讀入n-1個字元,然後在最後加上'\0',因此得到的字串有n個字元。但是如果在讀入n-1個字元前遇到了分行符號或EOF讀入結束,分行符號也讀入。

fgets(str,n,fp)返回str的首地址。

fputs(str,fp)同puts,str為字元數組名或char指標。

fputs()成功後返回0,否則返回EOF。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.