發現最近寫的程序總是要用到文件操作,所以把C語言與文件輸入輸出有關的函數復習一下。
C語言是通過將一個文件類型指針與文件關聯起來來對文件進行打開、關閉、輸入、輸出。
文件類型為FILE(實際上是一個結構體)。定義一個文件指針為FILE *fp;就可以將fp和某個文件關聯起來進行操作了。例如要打開一個文件:
FILE *fp;
fp=fopen("filename",“打開方式”);//fopen的返回值為NULL或指向文件的指針
或者直接FILE *fp=("filename","打開方式");
如果要重定向只需將指針fp和另一個文件關聯。意思是可用一個文件指針操作多個文件。
文件使用完後要及時關閉。這是個好習慣。關閉函數為fclose(fp);這樣fp就不在和之前指向的文件關聯了。
1.判斷文件是否打開成功: www.2cto.com
判斷文件是否打開成功可用fopen的返回值if((fp=fopen("filename","r"))==NULL)則打開失敗。
2.判斷文件是否結束:
判斷ASCII文件是否結束fgetc()會返回結束標志EOF(即-1)由於二進制文件數據會出現-1所以必須用函數feof(fp)判斷,feof(fp)==1則已結束。
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小;
注意:fread參數buffer指向的空間必須大於或等於要讀入的數據塊大小。
fread和fwrite一般用於二進制文件的輸入輸出。用於ASCII文件字符發生轉換的情況下可能出現與原設想的情況不同。
5.putw()和getw()用來對磁盤文件讀寫一個整數。
例如putw(10,fp);//返回值為輸出的數字(int)
int i=getw(fp);//失敗則返回-1
但注意putw()和getw()都是按二進制輸入輸出的。
所以如果你用putw()輸入數據到文件後以文本的方式打開看到的將都是亂碼。
同樣如果你在文本文件中輸入了數字並保存,用getw()來讀入的話讀入的結果並不是你想象的那樣。因為它是按二進制讀的
摘自 shimachao的專欄