文件讀取


1、獲得文件大小

int getfilesize(char *path)
{
	FILE *pf;//文件指針
	pf = fopen(path, "r");
	if(pf == NULL)
	{
		return -1;
	}
	else
	{
		fseek(pf, 0, SEEK_END);//文件指針移動到末尾
		int num = ftell(pf);//用於得到文件位置指針當前位置相對於文件首的偏移字節數
		fclose(pf);
		return num;

	}
}
fseek

 功能:重定位流(數據流/文件)上的文件內部位置指針

用法:int fseek(FILE *stream, long offset, int fromwhere);//函數設置文件指針stream的位置

第一個參數stream爲文件指針
第二個參數offset爲偏移量,正數表示正向偏移,負數表示負向偏移
第三個參數origin設定從文件的哪裏開始偏移,可能取值爲:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件開頭
SEEK_CUR: 當前位置
SEEK_END: 文件結尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次爲0,1和2.
fseek(fp,100L,0);把文件內部指針移動到離文件開頭100字節處;
fseek(fp,100L,1);把文件內部指針移動到離文件當前位置100字節處;
fseek(fp,-100L,2);把文件內部指針退回到離文件結尾100字節處。

ftell
功能:用於得到文件位置指針當前位置相對於文件首的偏移字節數

用法:long ftell(FILE *stream);

2、獲得行數

int getn(char *path)
{
	FILE *pf;//文件指針
	pf = fopen(path, "r");
	if(pf == NULL)
	{
		return -1;
	}
	else
	{
		int i = 0;
		while(!feof(pf))//檢測流上的文件結束符
		{
			char str[275];
			fgets(str,275,pf);//讀取一行
			i++;//計算行數
		}
		fclose(pf);
		return i;
	}
	
}


feof

功能:檢測流上的文件結束符,如果文件結束,則返回非0值,否則返回0

用法:int feof(FILE *stream);


fgets

功能:文件結構體指針stream中讀取數據,每次讀取一行。讀取的數據保存在buf指向的字符數組中,每次最多讀取bufsize-1個字符(第bufsize個字符賦'\0'),如果文件中的該行,不足bufsize個字符,則讀完該行就結束。如若該行(包括最後一個換行符)的字符數超過bufsize-1,則fgets只返回一個不完整的行,但是,緩衝區總是以NULL字符結尾,對fgets的下一次調用會繼續讀該行。函數成功將返回buf,失敗或讀到文件結尾返回NULL。

用法:char *fgets(char *buf, int bufsize, FILE *stream);

*buf: 字符型指針,指向用來存儲所得數據的地址。
bufsize: 整型數據,指明存儲數據的大小。
*stream: 文件結構體指針,將要讀取的文件流。



發佈了58 篇原創文章 · 獲贊 21 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章