C語言入門第十九篇,文件操作

文件操作是通過c語言編程實現對文本文件的控制,比如讀入文件內容、處理文件內容等等。相信很多學校的學生在學習的時候老師就會叫大家用c語言做一個學生的成績管理系統或者是什麼的系統,如果不涉及到數據庫,那多半是用文件來做。我們這篇主要講文件的讀出,處理,存入文件等的方式。
基本語法和操作
文件的操作是通過文件指針來完成的,這裏我不太想去糾結什麼文件流啊或者什麼的繁瑣概念。我們先來看看語法,聲明一個文件指針。

FILE *f; 

這時我們聲明瞭一個f,接下來我們就要告訴這個文件指針指向那個地址。

f=fopen("test.txt","r");

我們用c語言內置的fopen函數,將本文件夾下面的test.txt文件打開(注:這裏我講本文件夾加粗的意思是如果在其他的地方一定要給出具體地址,例如c盤下program文件,就應該給出"C:\Program\test.txt"。如果沒有給出具體地址則默認在本文件夾,這裏涉及到一個相對地址和絕對地址的概念,感興趣的人自己搜一下。)。我們看到fopen函數我們傳入了兩個值,前一個是文件的地址,後一個是打開的方式。
我們仔細講一下打開的方式,其實打開方式大類有三種分別是,讀(read),寫(write),追加(a)。接着後面可以加一個b(binary)代表以二進制的方式打開。下面給出打開方式的詳細介紹圖。
文件操作打開方式說明
上面是詳細的fopen第二個參數能夠使用的參數,圖片來自於百度知道fopen
當我們打開了這個文件我們就可以對他進行讀出數據,寫入數據等等的操作。下面我們介紹幾個函數,瞭解了這幾個函數基本的文件操作就沒有問題了。
文件操作函數
爲了避免太過於枯燥,我們通過一些例子來講講。我們需要從下面的這個文件中讀出數字判斷他是否爲素數(文件中有從1到1000的數),如果是就寫入另一個文件。
文件內容
fscanf
首先我們會用到的函數是fscanf,我們需要將文件中的數字全部讀出來,然後再對他進行是否爲素數的判斷。我們來看看怎麼讀入這個文件裏面的數據。

FILE *fp;
int a[1000];
int i=0; 
fp=fopen("2.txt","r");
while(!feof(fp))
{
	fscanf(fp,"%d",&a[i]);
	i++;
}

這裏我們解釋一下,feof()這個函數是否爲文件結束,如果不是就返回0,所以在前面加入了一個!邏輯取反的符號,前面在操作符那張講過。這句話的意思就是隻要沒到文件的結尾就不跳出循環。然後我們利用fscanf()讀入文件fp,第二個參數的意思是讀入的格式,這裏是整數所以使用%d,和前面scanf的格式化輸入一樣,因爲有一千個數所以我們前面聲明瞭一個1000的數組,第三個參數就是這個數據的元素啦,每讀入一個數就讓i自加1。
fprintf
上面我們對文件中的數字進行了讀取,並把它放入了一個數組中,我們可以對數組進行判定如果是就把它寫入另一個素數文件中。fprintf給我們提供了寫入文件的命令。

FILE *fp1;
fp1=fopen("3.txt"."w+");
fprintf(fp1,"%d ",a[i]);

這裏我們聲明瞭一個新的文件指針fp1,指向了一個命名爲3.txt的文件,然後使用fprintf,講a[i]中的值傳入了文件。這裏fprintf同樣是3個參數,分別是文件指針,格式化輸出(這裏需要注意我在%d後面加入了一個空格,是因爲我想每寫入文件一個數,後面就有一個空格,大家可以學習一下這種操作。),需要傳入的值。
講了fscanf和fprintf,他其實和scanf和printf還是有相同的地方,就是格式化輸出。所以大家要注意如果傳入字符就要用%c,浮點數就要用%f或者%lf等等。
fread
這裏我們再舉一個例子來講fread和fwrite。這兩個函數通常是讀寫一些數據結構(如果深入瞭解其實很多格式,例如圖片等等它具有自己的數據結構,哪幾個字節存了什麼東西是有標準的編碼規定的),這裏我們假設打開一個後綴名爲.bmp的圖片。我們科普一下bmp是windows下的標準圖片文件格式,bmp圖片的數據結構中,前兩個字節是BM這兩個字符。我們就利用程序,打開一個bmp的文件,然後輸出圖片的前兩個字符。

#include<stdio.h>
#include<stdlib.h>
int main()
{
	FILE *f;
	char a[10]={'\0'};
	f=fopen("1.bmp","r");
	fread(a,2,1,f);
	printf("%s\n",a);
} 

大家可以試一試這個程序,我們可以看到這一段程序,我們把1.bmp文件打開後,利用fread讀出了前兩個字符。這裏我們可以看出fread的用法,第一個參數是接受讀出的數據的,這裏我們申明瞭一個字符串a,然後第二個參數是字節數。第三個是計數,意思我們讀幾個字節數出來,這裏寫的1表示讀一個兩字節出來,最後一個參數是我們文件指針。
這裏說一下怎麼建一個bmp的圖片文件,直接在windows下新建一個畫圖保存的時候選擇bmp文件就好了。
fwrite
再利用上面的例子,我們如果用寫語音創建一個bmp文件時,第一步就是將BM這兩個字符寫在文件的前面。

FILE *f;
f=open("2.bmp","w+");
fwrite("BM",2,1,f);

有上面的fread作爲基礎,這個函數就很簡單了,第一個參數是要寫入的值,這裏是BM字符。第二,三,四個參數和fread類似這裏就不用再說了。

總結
本篇介紹C語言文件操作,介紹了一些簡單的函數,對於文件的操作,這裏僅僅是一個入門,例如fseek等等的函數都沒有介紹。總的來說如果基礎打的好的話,這篇並沒有問題。

練習
1.試着寫一個程序,講上面例子說的文本中的數字讀出來,然後再選出其中的素數的數字,寫入另一個文本中。
2.試着寫一個程序,讀出BMP的數據結構,BMP的數據結構大家可以百度一下。

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