c語言讀寫檔案fopen

來源:互聯網
上載者:User

首先介紹兩個函數:

/*
 函數功能:開啟一個檔案
 函數原型:FILE * fopen(const char * path,const char * mode);
 相關函數:open,fclose,fopen_s[1],_wfopen
 所需庫:<stdio.h>
 傳回值:檔案順利開啟後,指向該流的檔案指標就會被返回。如果檔案開啟失敗則返回NULL,並把錯誤碼存在errno 中。
 一般而言,開啟檔案後會作一些檔案讀取或寫入的動作,若開啟檔案失敗,接下來的讀寫動作也無法順利進行,所以一般在fopen()後作錯誤判斷及處理。
 參數說明:
 參數path字串包含欲開啟的檔案路徑及檔案名稱,參數mode字串則代表著流形態。
 mode有下列幾種形態字串:
 r 以唯讀方式開啟檔案,該檔案必須存在。
 r+ 以可讀寫方式開啟檔案,該檔案必須存在。
 rb+ 讀寫開啟一個二進位檔案,允許讀寫資料。
 rw+ 讀寫開啟一個文字檔,允許讀和寫。
 w 開啟唯寫檔案,若檔案存在則檔案長度清為0,即該檔案內容會消失。若檔案不存在則建立該檔案。
 w+ 開啟可讀寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失。若檔案不存在則建立該檔案。
 a 以附加的方式開啟唯寫檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾,即檔案原先的內容會被保留。(EOF符保留)
 a+ 以附加方式開啟可讀寫的檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾後,即檔案原先的內容會被保留。 (原來的EOF符不保留)
 wb 唯寫開啟或建立一個二進位檔案;只允許寫資料。
 wb+ 讀寫開啟或建立一個二進位檔案,允許讀和寫。
 ab+ 讀寫開啟一個二進位檔案,允許讀或在檔案末追加資料。
 at+ 開啟一個叫string的檔案,a表示append,就是說寫入處理的時候是接著原來檔案已有內容寫入,不是從頭寫入覆蓋掉,t表示開啟檔案的類型是文字檔,+號表示對檔案既可以讀也可以寫。
 上述的形態字串都可以再加一個b字元,如rb、w+b或ab+等組合,加入b 字元用來告訴函數庫以二進位模式開啟檔案。如果不加b,表示預設加了t,即rt,wt,其中t表示以文字模式開啟檔案。由fopen()所建立的新檔案會具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)許可權,此檔案許可權也會參考umask 值。
 有些C編譯系統可能不完全提供所有這些功能,有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等,讀者注意所用系統的規定。
 二進位和文字模式的區別
 1.在windows系統中,文字模式下,檔案以""代表換行。若以文字模式開啟檔案,並用fputs等函數寫入分行符號"\n"時,函數會自動在"\n"前面加上"\r"。即實際寫入檔案的是"" 。
 2.在類Unix/Linux系統中文字模式下,檔案以"\n"代表換行。所以Linux系統中在文字模式和二進位模式下並無區別。
 */

/*
 size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
 注意:這個函數以二進位形式對檔案進行操作,不局限於文字檔
 傳回值:返回實際寫入的資料區塊數目
 (1)buffer:是一個指標,對fwrite來說,是要擷取資料的地址;
 (2)size:要寫入內容的單位元組數;
 (3)count:要進行寫入size位元組的資料項目的個數;
 (4)stream:目標檔案指標;
 (5)返回實際寫入的資料項目個數count。
 */

測試代碼:

// fopenTest.cpp : 定義控制台應用程式的進入點。//#include "stdafx.h"#include "string.h"   //strlen()需要的標頭檔#include "stdlib.h"   //itoa()需要的標頭檔int _tmain(int argc, _TCHAR* argv[]){char buffer[7]="aaa\r\n";FILE *file = fopen("E:\\filetest.log","ab");fwrite(buffer,sizeof(char),sizeof(char)*5/*其中的兩個\是轉義不參與個數*/,file);  const char*pFilename = const_cast<char*>(__FILE__);//const char*pFileline = const_cast<char*>(__LINE__);char*pFileline =new char[256];itoa(__LINE__,pFileline,10);             //long->char  fwrite(pFilename,sizeof(char),strlen(pFilename),file);fwrite(pFileline,sizeof(char),strlen(pFileline),file);fclose(file);return 0;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.