c中檔案的讀取操作

2021-07-05 10:29:32 字數 4938 閱讀 4948

c中檔案的讀取操作

「檔案(file)」:所謂「檔案」是指一組相關資料的有序集合。資料以檔案的形式存放在外部介質(一般是磁碟、磁帶、光碟等)上,作業系統中是以檔案為單位對資料進行管理的,以檔名作為訪問檔案的標識。

c語言把檔案看作乙個位元組序列,即由一連串的位元組組成。根據檔案中的資料組織形式,資料檔案可分為ascii碼檔案和二進位制檔案。ascii碼檔案,又稱為「文字檔案」(text),其每乙個位元組存放乙個ascii碼。二進位制檔案,把記憶體中的資料按其在記憶體中的儲存形式存放在磁碟上。

如:十進位制整數10000,在記憶體中佔兩個位元組,其存放形式是:00100111,00010000。在二進位制檔案中也按這種方式存放。但是,在ascii檔案中,十進位制整數10000存放為31h、30h、30h、30h、30h,佔五個位元組,它們分別是1、0、0、0、0、0字母的ascii碼。

c中檔案的讀取,只有通過檔案指標,才能呼叫相應的檔案。檔案操作的過程:對磁碟檔案的操作必須「先開啟,後讀取,最後關閉」。

下面就是利用檔案指標,開啟乙個檔案,以唯讀的開啟方式。

file * fp;

fp = fopen("d://1","r");

下面分析下fopen函式中的第二個引數使用檔案方式的類別,

使用檔案方式 含義

"r"(唯讀)

為輸入開啟乙個文字檔案

"w"(只寫)

為輸出開啟乙個文字檔案

"a"(追加)

為追加開啟乙個文字檔案

"rb"(唯讀)

為輸入開啟乙個二進位制檔案

"wb"(只寫)

為輸出開啟乙個二進位制檔案

"ab"(追加)

為追加開啟乙個二進位制檔案

"r+"(讀寫)

為讀/寫開啟乙個文字檔案

"w+"(讀寫)

為讀/寫建立乙個文字檔案

"a+"(讀寫)

為讀/寫開啟乙個文字檔案

"rb+"(讀寫)

為讀/寫開啟乙個二進位制檔案

"wb+"(讀寫)

為讀/寫建立乙個二進位制檔案

"ab+"(讀寫)

為讀/寫開啟乙個二進位制檔案

注釋:

1、若使用檔案方式為「a」,表示向檔案尾新增新資料(不刪除原有資料),但要求此時檔案必須存在,否則出錯,但是我在是vs2010中除錯,檔案不存在,會自動建立乙個檔案,不會報錯,此外只能向檔案寫資料不能讀取檔案中的資料。若使用檔案方式為「a+」,表示向檔案尾新增新資料(不刪除原有資料),檔案不存在,會自動建立乙個檔案,不會報錯,另外使用這種檔案方式,開啟的檔案即可以用來輸入資料,也可以用來輸出資料。

2、用"w"方式開啟的檔案只能用於向該檔案寫資料。如果原來不存在該檔案,則在開啟時新建乙個檔案,如果該檔案存在,則先刪除該檔案(其中的資料肯定刪除了),然後重新建立乙個新檔案。

3、若使用檔案方式為「w+」和「w」,如果原來不存在該檔案,則在開啟時新建乙個檔案,如果該檔案存在,則先刪除該檔案(其中的資料肯定刪除了),然後重新建立乙個新檔案。

4、若使用檔案方式為「r+",

該檔案必須存在,向檔案中寫入資料的時候,不會先刪除該檔案,而是直接覆蓋,能覆蓋多少就覆蓋多少,覆蓋不了的先前資料仍然存在檔案中。

使用檔案方式為「r+」,向檔案中存入資料:

int main(void)

char str ="he fei wo yao liu xia1";

int len = strlen(str);

for(int i = 0; i < len;i++)

fclose(fp);

return 0;

}

使用檔案方式為「r+」,從檔案中讀出資料

int main(void)

char ch = fgetc(fp);

while(ch != eof)//從文字檔案中讀取資料

fclose(fp);

return 0;

}

對於文字檔案,遇檔案尾時返回檔案結束標誌eof。對於二進位制檔案,用feof(fp) 判別是否遇檔案尾,feof(fp)=1說明遇檔案尾。

從文字檔案中順序讀入檔案內容,並在螢幕上顯示出來,可以用:

ch = fgetc(fp);

while(ch != eof)

從二進位制檔案中順序讀入檔案內容,可以用:

while(!feof(fp))

如果在檔案中寫入資料,如果沒有關閉就直接讀取檔案中的內容,就會出現錯誤-寫好檔案後,沒有關閉,那麼檔案指標在最後乙個位置,那你在讀的時候肯定就是從末尾啊,所以是隨機字元,這樣會出現亂碼。如何糾正,等檔案寫完資料後,首先關閉檔案,再讀取檔案,即可,如下

fclose(fp);

fp = fopen("d://1","r+");

下面介紹讀寫字串函式:fgets和fputs:

1、讀字串函式fgets函式

功能:從指定的檔案中讀乙個字串到字元陣列中,函式呼叫的形式為: fgets(字元陣列名,n,檔案指標);其中的n是乙個正整數。表示從檔案中讀出的字串不超過 n

-1個字元。在讀入的最後乙個字元後加上串結束標誌'\0

'。例如:fgets(str,n,fp);的意義是從fp所指的檔案中讀出n

-1個字元送入字元陣列str中。

注意:

a、在讀出n

-1個字元之前,如遇到了換行符或eof,則讀出結束,但遇到空格不結束。

b、fgets函式也有返回值,其返回值是字元陣列的首位址。

int main(void)

fgets(str,12,fp);

printf("%s",str);

fclose(fp);

return 0;

}

2、寫字串函式fputs函式

功能:向指定的檔案寫入乙個字串,其呼叫形式為: fputs(字串,檔案指標) 其中字串可以是字串常量,也可以是字元陣列名或指標 變數,例如:fputs(「abcd「,fp);

int main(void)

printf("input a string:\n");

scanf("%s",st);

fputs(st,fp);

rewind(fp);//把檔案流的指標指向開頭的位置

ch=fgetc(fp);

while(ch!=eof)

fclose(fp);

return 0;

}

下面介紹檔案中的格式化函式fscanf和fprintf

1、fscanf

a、函式原型:

int fscanf(file *fp,char *format,arg_list)
b、功能說明

將fp指定的檔案中的資料按照format指定的格式,輸出到

變數表列(arg_list)中的相應變數。fscanf遇到空格和換行符就結束。表示遇到空格或者換行符,檔案中的相應資料讀取結束。

c、注意

檔案中的資料以逗號隔開,對應的format中的指定格式也以逗號隔開。此時我在vs2010中執行出現錯誤。

d、返回值

成功返回讀入的引數的個數,失敗返回eof(-1)。

void main()

int a;

double b;

char c[15];

fscanf(fp,"%d%lf%s",&a,&b,c);

printf("%d ",a);

printf("%lf ",b);

printf("%s ",c);

}

2、fprintf

a、函式原型:

int fprintf(file *fp,char *format,arg_list)

b、功能說明

將變數表列(arg_list)中的資料,按照format指出的格式,寫入由fp指定的檔案。fprintf()函式與printf()函式的功能相同,只是printf()函式是將資料寫入螢幕檔案(stdout)。

fprintf函式按格式將記憶體中的資料轉換成對應的字元,並以ascⅱ**形式輸出到文字檔案中。

c、引數說明

fp:這是個檔案指標,指出要將資料寫入的檔案。

format:這是個指向字串的字元指標,字串中含有要寫出資料的格式,所以該字串成為格式串。格式串描述的規則與printf()函式中的格式串相同。

arg_list:是要寫入檔案的變數表列,各變數之間用逗號分隔。

d、返回值

輸出的字元數,發生錯誤時返回乙個負值。

void main()

int a = 100;

double b = 6.5;

char c[15] ="tansheng";

fprintf(fp,"%d %lf %s",a,b,c);

}

fprintf格式串中之間有空格或者有逗號,則對應在檔案中也有相應的空格或逗號。

fprintf和fscanf函式對磁碟檔案讀寫,使用方便,但由於在輸入時要將ascii碼轉換為二進位制形式,在輸出時又要將二進位制形式轉換為字元,花費時間比較多。因此,在記憶體與磁碟頻繁交換資料的情況下,最好不用fprinf和fscanf函式,而用fread和fwrite。

Java 中檔案讀取操作

1.建立file f file f new file filename 2.用filereader filereader讀取檔案f中的內容 filereader reader new filereader f 3.建立 char 型別的快取 buf儲存讀取檔案的內容 長度為 f.length cha...

C 資料夾中檔案的讀取

在做影象處理演算法時,我們經常需要讀取資料夾下所有的。每次這樣的操作都要上網查一番,很麻煩。這裡mark一種方便的檔案讀取方法。資料夾下檔案的讀取需要包含標頭檔案io.h。如下 include include ifdef linux include endif ifdef win32 include...

c 讀取資料夾中檔案

直接上 void getfiles string path,vector pic files else while findnext hfile,fileinfo 0 findclose hfile 其中主要用到了 finddata t 結構 struct finddata t 其中unsigned...