程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 總結文件操作函數(一)

總結文件操作函數(一)

編輯:關於C

在進程一開始運行,就自動打開了三個對應設備的文件,它們是標准輸入、輸出、錯誤流,分別用全局文件指針stdin、stdout、stderr表示,對應的文件描述符為0,1,2;stdin具有可讀屬性,缺省情況下是指從鍵盤的讀取輸入,stdout和stderr具有可寫屬性,缺省情況下是指向屏幕輸出數據。


將文件路徑轉化為文件指針:

#include //頭文件包含

FILE *fopen(const char *pach,const char *mode); //文件名 模式

int fclose(FILE *stream);

fopen以mode的方式打開或創建文件,如果成功,將返回一個文件指針,失敗則返回NULL.

fopen創建的文件的訪問權限將以0666與當前的umask結合來確定。

在Linux系統中,mode裡面的’b’(二進制)可以去掉,但是為了保持與其他系統的兼容性,建議不要去掉。ab和a+b為追加模式,在此兩種模式下,無論文件讀寫點定位到何處,在寫數據時都將是在文件末尾添加,所以比較適合於多進程寫同一個文件的情況下保證數據的完整性。一般使用r或者w模式。

將目錄名轉化為目錄指針:

#include

#include

DIR *opendir(const char *name); //打開一個目錄,返回一個DIR類型的指針

struct dirent *readdir(DIR *dir); //讀取目錄的一項信息,並返回該項信息的結構體指針

void rewinddir(DIR *dir); //重新定位到目錄文件的頭部

int closedir(DIR *dir); //關閉目錄文件

讀取目錄信息的步驟為:

用opendir函數打開目錄;

使用readdir函數迭代讀取目錄的內容,如果已經讀取到目錄末尾,又想重新開始讀,則可以使用rewinddir函數將文件指針重新定位到目錄文件的起始位置;

用closedir函數關閉目錄

opendir()用來打開參數name指定的目錄,並返回DIR*形態的目錄流,和文件操作函數open()類似,接下來對目錄的讀取和搜索都要使用此返回值。函數失敗則返回NULL;

在字符串讀取和寫入的時候以及格式化輸入輸出時經常用到文件指針:

Char buf[1024];

char *fgets(char *s, int size, FILE *stream);

int fputs(const char *s, FILE *stream);

fgets和fputs從文件流stream中讀寫一行數據;當文件指針為stdin/stdout分別表示從標准輸入流和輸出流 輸入和輸出。此時類似於gets和puts函數

fgets可以指定目標緩沖區的大小,讀取文件的時候size大於該行的字符總數加2(多出來的兩個,一個保存文件本身的'\n'換行,一個保存字符串本身的結束標識'\0'),文件並不會繼續讀下去,僅僅只是這一行讀取完,隨後指向文件的指針會自動偏移至下一行。

此時buf[strlen(buf)-1]裡存放的是'\n'

用char*則要用malloc分配內存。

fputs不會在行尾自動添加換行符,但是puts會在標准輸出流中自動添加一換行符。

對二進制形式的按照塊來讀寫:

函數原型:

size_t fread(void *buffer,size_t size, size_t count, FILE *fp);

size_t fwrite(void *buffer,size_t size, size_t count, FILE *fp);

功能:讀/寫數據塊fread與fwrite 一般用於二進制文件的輸入/輸出

fread:從fp所指向的文件中讀取count個塊,每個塊的長度為size個字節,存放到以buffer為首地址的內存中。其中buffer必須已經是由內存空間的。

fwrite:從以buffer為首地址的內存中讀取count個塊,每個塊的長度為size個字節,寫入到fp所指向的文件中。

返回值:成功,返回讀/寫的塊數;出錯或文件尾,返回0

說明:

buffer: 指向要輸入/輸出數據塊的首地址的指針

size: 讀/寫的數據塊的大小(字節數)

count: 要讀/寫的數據塊的個數

fp: 要讀/寫的文件指針

范例代碼:
#include 
#include 
typedef struct STUDENT
{
		char sNo[5];
		char sName[20];
		double score;
}STUDENT;
void main()
{    /* 操作一塊 */
		STUDENT stu[3] = {{"0001", "趙軍", 89},{"0002", "李千", 90},{"0003", "張芳", 100}
		};
		STUDENT stu2;
		FILE* fp = fopen("d:\\b.txt", "wb+");//寫打開,轉化為文件指針
		if(NULL == fp)
		{
			printf("Can not open this file!\n");
			exit(0);
		}
		fwrite(stu, sizeof(STUDENT), sizeof(stu)/sizeof(STUDENT), fp);
		rewind(fp);	/* 文件指針重新回到頭 */
		fseek(fp, sizeof(STUDENT), SEEK_SET); /* 定位,此處跳過一條記錄 */
		fread(&stu2, sizeof(STUDENT), 1, fp); /* 從文件中讀取指定大小的塊 */
		printf("%s-->%s-->%lf\n", stu2.sNo, stu2.sName, stu2.score);
		fclose(fp);
}



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved