fopen()函式用來開啟乙個檔案,它的格式為:
filename為檔名(包括檔案路徑),type為開啟方式,它們都是字串。fopen() 會獲取檔案資訊,包括檔名、檔案狀態、當前讀寫位置等,並將這些資訊儲存到乙個file型別的結構體變數中,然後將該變數的位址返回。如果接收 fopen() 的返回值,就需要定義乙個 file 型別的指標。例如:file *
fopen
(char
*filename,
char
*type)
;
file *fp =
("demo.txt"
,"r"
);
開啟方式(type)如**所示:
型別
詳解「r」(唯讀)
為輸入開啟乙個文字檔案
「w」(只寫)
為輸出開啟乙個文字檔案
「a」(追加)
為追加開啟乙個文字檔案
「rb」(唯讀)
為輸入開啟乙個二進位制檔案
「wb」(只寫)
為輸出開啟乙個二進位制檔案
「ab」(追加)
為追加開啟乙個二進位制檔案
「r+」(讀寫)
為讀/寫開啟乙個文字檔案
「w+」(讀寫)
為讀/寫建立乙個文字檔案
「a+」(讀寫)
為讀/寫開啟乙個文字檔案
「rb+」(讀寫)
為讀/寫開啟乙個二進位制檔案
「 wb+」(讀寫)
為讀/寫建立乙個二進位制檔案
「ab+」(讀寫)
為讀/寫開啟乙個二進位制檔案
在開啟乙個檔案時,如果出錯,fopen將返回乙個空指標值null。
**如下(示例):
**如下(示例):file *fp =
null;if
(fp =
fopen
("d:\\test.txt"
,"rb")==
null
)//判斷開啟的檔案是否為空,如果為空,則提示錯誤
二進位制是按照二進位制編碼方式存放在檔案中的,雖然可以在螢幕上顯示,但是不能讀懂,文字檔案是asc碼,可以在螢幕上按字元顯示。if
(fclose
(fp)==0
)//檔案關閉,如果成功則返回值為0,返回值為非0表示關閉錯誤
else
以字元形式讀寫檔案時,每次可以從檔案中讀取乙個字元,或者向檔案中寫入乙個字元。主要使用兩個函式:fgetc()和fputc()。fgetc 是 file get char 的縮寫,意思是從指定的檔案中讀取乙個字元。它的原型為:
fgetc() 讀取成功時返回讀取到的字元,讀取到檔案末尾或讀取失敗時返回eof。eof 是 end of file 的縮寫,表示檔案末尾,是在 stdio.h 中定義的巨集,它的值是乙個負數,往往是 -1。eof 不絕對是 -1,也可以是其他負數,這要看編譯器的實現。int fgetc (file *fp)
;//fp 為檔案指標。
**如下(示例):
eof 本來表示檔案末尾,意味著讀取結束,但是很多函式在讀取出錯時也返回 eof,那麼當返回eof時,到底是檔案讀取完畢了還是讀取出錯了?我們可以借助 stdio.h 中的兩個函式來判斷,分別是 feof() 和 ferror()。char ch;
while
((ch=
fgetc
(fp))!=
eof)
//每次讀取乙個位元組,直到讀取完畢
putchar
(ch)
;//輸出字元ch的值
fputc
('a'
, fp)
;//想文字中輸入字元a
fgets() 函式用來從指定的檔案中讀取乙個字串,並儲存到字元陣列中,它的原型為:// feof() 函式用來判斷檔案內部指標是否指向了檔案末尾,它的原型是:
int feof ( file * fp )
;//當指向檔案末尾時返回非零值,否則返回零值。
// ferror() 函式用來判斷檔案操作是否出錯,它的原型是:
int ferror ( file *fp )
;//出錯時返回非零值,否則返回零值。
返回值:讀取成功時返回字元陣列首位址,也即 str;讀取失敗時返回 null;如果開始讀取時檔案內部指標已經指向了檔案末尾,那麼將讀取不到任何字元,也返回 null。讀取到的字串會在末尾自動新增 『\0』,n 個字元也包括 『\0』。也就是說,實際只讀取到了 n-1 個字元,如果希望讀取 100 個字元,n 的值應該為 101。char
*fgets (
char
*str,
int n, file *fp )
;//str 為字元陣列,n 為要讀取的字元數目,fp 為檔案指標。
**如下(示例):
)//判斷開啟的檔案是否為空if(
)//判斷開啟的檔案是否為空
char buf[n]
;//定義乙個buf,作為快取區
int len =0;
//讀取的長度
while
((len =
fread
(buf,
sizeof
(char
),n,rfp))!=
0)fclose
(wfp)
;fclose
(rfp)
;
通過字串++和減減實現字元的加密和解密fseek
(fp,0,
seek_end);
//seek_end檔案末尾,0偏移量.
fseek
(fp,0,
seek_set);
//seek_end檔案頭,0偏移量.
long filesize =
ftell
(fp)
;//返回當前的檔案指標,相對於檔案開頭的位移量.
int ret =
fprintf
(fp,
"%s"
,"測試");
//將檔案格式化方式寫入到檔案中,成功返回字串長度,錯誤返回負數.
int ret =
feof
(fp)
;//判斷是否到檔案尾部,如果是返回乙個正數,不是返回0.
int ret =
fflush
(fp)
;//重新整理檔案快取區,如果返回0,則表示成功,eof表示失敗,錯誤在error中.
rewind
(fp)
;//設定檔案流位置為開頭,和fseek()一樣.
long
intftell
(file *stream);返回檔案當前的位置
void
encrypt
(char
*s)//檔案加密
}void
disencrypt
(char
*s)//檔案解密
}
1、讀取檔案文字和寫入檔案文字應該分開封裝,如果檔案開啟後,寫入檔案,然後在讀取檔案,很容易出現問題(如果寫入檔案長度為4,但是讀取長度為8,則檔案後面會追加4個空格)。 2、在windows下,文字檔案開啟檔案\n換行,會自動在前面加入\r,但是二進位制開啟不會。 3、在使用fread讀取檔案,並且顯示時,一次讀取的大小要小於buf的定義的大小,不然,會出現越界,不能自動追加'\0'結尾,但是如果是檔案複製,則可以。remove
("e:\\study\\program\\qt\\file\\a.txt");
//刪除檔案a.txt
rename
("e:\\study\\program\\qt\\file\\b.txt"
,"e:\\study\\program\\qt\\file\\a.txt");
//重新命名b.txt為a.txt
C語言檔案讀寫
include include define maxlen 1024 int main file outfile,infile outfile fopen 1.bmp wb infile fopen c 1.bmp rb unsigned char buf maxlen int rc while r...
C語言讀寫檔案
c語言庫函式包括檔案的開啟 關閉 讀 寫 定位等各種操作 要操作檔案,首先要宣告乙個檔案指標變數file fp 呼叫fopen開啟檔案 檔案指標名 fopen 檔名,使用檔案方式 ps 這裡檔案路徑必須是帶雙斜槓 其中,1.檔案使用方式 意 義 rt 唯讀開啟乙個文字檔案,只允許讀資料 wt 只寫開...
C語言檔案讀寫
讀取乙個完整的檔案 include include int main 如果檔案錯誤,退出1 獲得檔案大小 fseek pfile 0 seek end 指標移到檔案末位 lsize ftell pfile 獲得檔案長度 rewind pfile 函式rewind 把檔案指標移到由stream 流 指...