第二十三講 再說檔案的操作

2023-03-16 22:11:42 字數 1696 閱讀 1770

昨天我們說了檔案的讀取和寫入,不過我們只說了一對函式,關於文字檔案的操作的函式很多,我本來不打算多說的,不過想了寫,既然都把fgets和fputs都說了,如果不說fscanf和fprintf的話是不是有點過分了呢?於是心想,今天就用一講的課程來說說這兩個函式。

printf和scanf我們一開始就接觸了,對於這兩個函式再熟悉不過,不過我想告訴大家,這兩個函式的變形有很多種,sprintf,sscanf等等都是他們的變形,這兩個函式是他們的高階用法,通常都沒有多少人去使用,因為有很多種方式可以替代他們,所以如果不是想彰顯個人的程式設計水平的話,我想沒人會去使用它們,甚至發覺很多幾年工作經驗的人竟然都不知道sscanf這個函式,可見他的用處不多。

現在我們要說的fprintf和fscanf,所以關於其他的我就懶得說,我給出了函式了,大家若有興趣可以自己去谷歌一下。

和fgets和fputs一樣,fprintf和fscanf同樣需要file的指標作為引數,所以我們還是用一個例子來說明這個問題比較適合:

#include

#include

int main()

fclose(file1);

fclose(file2);

system('pause');

return 0;

}這個例子,我們可以在標準輸出框中看到了文字框的所有內容,但同時我們也發現一個問題,這些內容是密密麻麻的列印出來的,我們再回去看看我們要寫入的檔案看看,發現裡面的內容和我們在標準輸出框中的內容一樣。

這真是一個棘手的問題啊,不過也不足為奇,還記得我們在開始的時候用scanf讀取“hello world”的時候,他只讀取了一個hello,所以當時我們為了解決這個問題,於是引進了gets。

通過昨天和今天的對比,我想大家對這兩對i/o函式都有所瞭解了,所以該使用什麼大家已經心裡有數。

現在我們來說說一下開啟檔案的模式,也就是來說說fopen這個函式,想要了解一個函式,我們就得先知道他的原型,下面是我們從msdn上面查到的原型:

file *fopen( 

const char *filename,

const char *mode );

這個原型很清楚,他的第一個引數就是我們要開啟或者是建立的檔名,第二個引數是開啟模式,開啟模式我們可以有下面幾種型別。

'r'    開啟一個文字檔案, 只讀模式。

'w'    開啟一個文字檔案,只寫模式,並且先將檔案的長度截為零。如果該檔案不存在則先建立檔案。

'a'    開啟一個文字檔案,可以寫入檔案,向已有檔案的發問追加內容,如果該檔案不存在則先建立檔案。

'r+'   開啟一個文字檔案, 可以進行更新,即可以讀取和寫入檔案。

'w+'   開啟一個文字檔案, 可以進行更新 (讀取和寫入), 如果該檔案存在則首先將其長度截為零, 如果不在則先建立檔案。

'a+'   開啟一個文字檔案,可以進行更新 (讀取和寫入), 向已有檔案的尾部追加內容,如果該檔案不存在則先建立之; 可以讀取整個檔案, 但寫入時只能追加內容。

'rb' 'wb' 'ab' 'ab+' 'a+b' 'wb+' 'w+b' 'ab+' 'a+b'

這是以二進位制的方式操作檔案,b既是表示二進位制,意義和上面一樣。

今天的內容就說到這裡,明天情人節,就不推送了,下禮拜我們把文字檔案的最後一點知識點說了也就算是結束文字檔案的操作了。

大家都懂的,週末不推送,明天雖然不是週末,但是是情人節,所以要陪陪老婆和孩子。

回覆d&d直接檢視目錄