《實用C 》第44課 檔案IO操作之讀寫

2021-09-03 07:18:04 字數 2276 閱讀 7113

1、簡介:

上節課給大家介紹了各種型別的檔案流物件,對檔案進行了開啟與關閉的操作。那麼開啟與關閉不是目的,開啟檔案之後重要的是為了要進行檔案的讀寫操作,不然開啟、關閉檔案幹嘛?對不對?在c++檔案流操作中,可以使用多種方法對檔案進行讀寫操作,例如:<<、>>、put、get、getline、read、write 都是可以的。接下來就分別給大家講解下每個函式怎麼用!

2、檔案的寫操作:

寫操作對應的有:<<、put、write 等,我們來看下他們分別都能實現什麼樣的寫檔案功能!

①、寫文字型別/ascii碼型別的可見字串:<<、put

示例**如下:

#include

using namespace std;

int main(int argc, char* argv)

大家看到了吧,這就是寫文字檔案的方式,其中 << 支援的型別比較多,put 只能寫單個字元到檔案,還是有一定侷限性的,所以 put 平時用的比較少。

<< 支援的型別詳見:

... eam/operator%3c%3c/

②、二進位制型別寫檔案:write

並不一定所有的檔案都是文字檔案,也並不是所有的功能都要求用文字檔案來實現。例如:檔案就是二進位制檔案,我們用記事本開啟之後發現裡面是亂碼,根本不是我們用眼睛能看懂的文字檔案,所以類似這樣的檔案就不能用 << 或者 put 來寫入了。那麼用什麼呢?可以用接下來要給大家講解的 write 函式,他支援文字型別和二進位制型別。你只要告訴他記憶體的位址,以及從這個位址開始要寫多少位元組的資料到檔案就可以了,例如:

#include

using namespace std;

int main(int argc, char* argv)

這裡面大家可以看到 write 的第乙個引數是 char* 型別的,但是不要誤以為 write 只能寫字串型別的資料,完全錯誤!char * 不一定是字串,裡面放的東西可能是字串,也可能是二進位制資料。其實對於 write 來說第乙個引數如果寫成 void* 可能大家能更好理解一些。也就是乙個位址而已,具體這個位址裡面的內容是什麼,write 不關心。第二個引數就是要乙個長度,要從多長的一塊記憶體資料寫到檔案中。大家明白了嗎?

3、檔案的讀操作:

①、讀文字型別/ascii碼型別的檔案:>>、get、getline

#include

using namespace std;

int main(int argc, char* argv)

>>支援的型別詳見:

... eam/operator%3e%3e/

istream::get 詳見:

ce/istream/istream/get/

還有乙個 getline 函式,該函式是從檔案中讀取一行資料,什麼是一行?所謂的一行就是有換行符 \n,或者達到 getline 的緩衝區大小,或者讀到檔案末尾。

istream::getline 詳見:

ce/istream/istream/getline/

所以,如果是想把檔案中的內容一行一行的讀進來,可以使用 getline 函式,還是非常方便的。

#include

using namespace std;

int main(int argc, char* argv)

;fs_in.getline(sz, 10);

fs_in.getline(sz, 10);

fs_in.getline(sz, 10);

fs_in.close();

return 0;

}②、讀取二進位制檔案型別:read

#include

using namespace std;

int main(int argc, char* argv)

;fs_in.read(sz, 100);

fs_in.close();

return 0;

}具體 read 函式的定義見:

ce/istream/istream/read/

也就是說他從指定的檔案中讀取資料,讀取的資料可以是文字型別的也可以是二進位制型別的,其實read也不管你想要讀取什麼東西,我只管讀就是了,把讀取到的內容放在第乙個引數指標指向的記憶體中,具體讀取的位元組數就是靠第二個引數指定。

4、小作業:

今天給大家講解了如何進行檔案的讀寫,介紹了相關的讀寫檔案的函式,那麼今天給大家留的小作業就是如何判斷讀寫檔案的操作/函式是否成功了呢?以及如何判斷是否讀到檔案末尾了呢?希望大家課後自己實踐下!

C語言第13課 檔案讀寫

乙個檔案,無論它是文字檔案還是二進位制檔案,都是代表了一系列的位元組。c 語言不僅提供了訪問頂層的函式,也提供了底層 os 呼叫來處理儲存裝置上的檔案。使用fopen 函式來建立乙個新的檔案或者開啟乙個已有的檔案,這個呼叫會初始化型別file的乙個物件,型別file包含了所有用來控制流的必要的資訊。...

C語言第九課 檔案的操作

檔案的開啟 fopen函式 file fp fp fopen 檔名 使用檔案的方式 r 以唯讀的方式開啟檔案,只允許讀,此檔案必須存在,否則返回null,開啟成功後返回檔案指標,位置指標指向檔案頭部 r 以可讀可寫的方式開啟檔案,允許讀寫,此檔案必須存在,否則返回null,開啟成功後返回檔案指標,位...

《實用C 》第50課 C 容器之對映map

1 什麼是 map,他跟 vector 和 list 有什麼區別?什麼情況下使用 map?map提供的是一種鍵值對的容器,裡面的資料元素都是成對出現的,即 key value,在知道 key 的情況下能迅速的找到 value,他們是一一對應的關係。如下圖 第乙個值稱之為關鍵字 key 每個關鍵字只能...