C語言——文件操作常用函數


關於文件的函數,一般包含在頭文件stdlib.h中;

一、標準I/O

從C Primer Plus抄了一段程序過來學習

#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv []){
	int ch;		//讀取文件時,存儲每個字符的地方
	FILE *fp;	//文件指針
	unsigned long count=0;
	if(argc!=2){
		printf("Usage:%s filename\n, argv[0]");
		exit(EXIT_FAILURE);
	}
	if((fp = fopen(argv[1], "r")) == NULL){
		printf("Can't open %s\n", argv[1]);
		exit(EXIT_FAILURE);
	}
	while((ch = getc(fp) !=EOF){
		putc(ch, stdout);	//與putchar(ch);相同
		count++;
	}
	fclose(fp);
	printf("File %s has %lu characters\n", argv[1], count);
	return 0;
}

1. fopen()函數

//fopen(“文件名”,"模式")
fp = fopen(argv[1], "r")	//返回打開文件的指針,失敗爲NULL

fopen()將返回文件指針(file point),其他I/O函數可以使用這個指針指定改文件。
文件指針的類型(fp)的類型時指向FILE的指針,FILE是一個定義在stdio.h中的派生類型。
文件指針fp並不指向實際的文件,它指向一個包含文件信息的數據對象,其中包含操作文件的I/O函數所用的緩衝信息。
因爲標準庫中的I/O函數使用緩衝區,所以它們不僅要知道緩衝區的位置,還要知道緩衝區被填充的程度以及操作哪一個文件。
模式介紹

模式字符串 含義
“r” 以讀模式打開文件
“w” 以寫模式打開文件,並把現有文件的長度截爲0,如果文件不存在,則創建一個新文件
“a” 以寫模式打開文件,在現有文件末尾添加內容,如果文件不存在,則創建一個新文件
“r+” 以更新模式打開文件(即可以讀寫文件)
“w+” 以更新模式打開文件(即,讀和寫),並把現有文件的長度截爲0,如果文件不存在,則創建一個新文件
“a+” 以更新模式打開文件(即,讀和寫),在現有文件末尾添加內容,如果文件不存在,則創建一個新文件;可以讀整個文件,但只能從末尾添加內容
“rb”、“wb”、“ab”、“rb+”、“r+b”、“wb+”、“w+b”、“ab+“、“a+b"、”r+” 與前面類似,但是以二進制的模式而不是文本模式打開文件
“wx”、”wbx”、“w+x”、“wb+x”、“w+bx” (C11)類似非x模式,但是如果文件已存在或以獨佔模式打開,則打開文件失敗

2. fclose()函數

//fclose(文件指針)
fclose(fp);	//關閉成功,fclose()函數返回0,失敗返回EOF即-1

3.getc()和putc()函數

getc()和putc()函數與getchar()和putchar()函數類似。所不同的是,要告訴getc()和putc()函數使用哪一個文件。
注:getchar(ch)從鍵盤獲取字符輸入,存在ch中、putchar(ch)將字符ch輸出到屏幕
注意:換行符’\n’是能夠讀出來的

ch = getc(fp)//從標準輸入中獲得一個字符
putc(ch, fpout)	//把字符ch放入FILE指針fpout指定的文件中

二、文件I/O

1.fprintf()和fscanf()函數

fprintf(文件指針,格式字符串,輸出列表)
fscanf(文件指針,格式字符串,輸出列表)

fprintf(fp, "%d,%6.2f", i, f);
它的作用是將int型變量i和float型變量f的值按%d和%6.2f的格式輸出到fp所指向的文件中。若i=3,f=4.5,則輸出到磁盤文件上是一下字符。
3,  4.50
%6.2f表示有兩位小數,輸出佔六個位置,4.50已經佔四個位置,前面補齊兩個空格

2.fgets()和fputs()函數

fgets(str, n, fp)	//讀成功,返回地址str,失敗則返回NULL
fputs(str, fp)		//輸出成功返回0,否則返回非0值

fgets():從fp所指文件中讀入一個長度爲n-1的字符串,並在最後加一個’\0’字符,然後把這n個字符存在字符數組str中。
fputs():將str所指向的字符串輸出到fp所指向的文件中。
以上兩個函數類似gets()和puts()函數,只是作用的對象不同,gets()和puts()針對終端,fgets()和fputs()針對文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章