C++中使用文件流進行文件讀寫操作非常方便,我們可以使用標準庫中的“頭文件來實現。和C語言中的文件操作相比,使用文件流可以更加簡便和高效地讀寫文件,同時也具備更好的平台兼容性。下面我們將從文件流的打開、讀寫和關閉三個方面來詳細講解使用C++文件流進行文件讀寫操作。
一、文件流的打開
在進行文件流操作之前,需要先打開文件。C++中提供了兩種方式來打開文件:一種是以文本方式打開,另一種是以二進位方式打開。
打開文件的語法為:
“`cpp
void open (const char* filename, ios::openmode mode);
“`
其中,`filename`指文件名;`mode`是打開文件時的模式,可以是以下幾種之一:
| 打開模式 | 含義 |
|:—–:|—–|
| ios::in | 讀模式,打開文件進行讀取 |
| ios::out | 寫模式,打開文件進行寫入 |
| ios::app | 追加模式,打開文件並在其末尾追加數據 |
| ios::binary | 二進位模式 |
例如,以只讀方式打開名為`test.txt`的文本文件的代碼如下:
“`cpp
#include
std::ifstream in_file;
in_file.open(“test.txt”, std::ios::in);
“`
其中,`std::ifstream`表示打開一個只讀文件,如果是寫文件,則應該使用`std::ofstream`,如果既有讀又有寫,則應該使用`std::fstream`。
如果打開文件成功,則返回true,否則返回false。打開文件後,若想操作成功,則需判斷打開是否成功,例如可以添加如下代碼:
“`cpp
if (in_file.is_open())
{
// 執行操作
}
“`
當然,也可以使用文件流對象的析構函數,自動釋放打開的文件資源:
“`cpp
{
std::ifstream in_file(“test.txt”);
if (in_file.is_open())
{
// 執行操作
}
}
“`
這種方式則會在離開當前作用域時自動關閉文件流。
二、文件流的讀寫
在打開文件之後,就可以進行讀寫操作了。
讀文件
在使用文件流讀文件時,可以使用文件流對象的`getline()`、`get()`和`read()`等方法。
`getline()`方法讀取一行數據,語法如下:
“`cpp
std::istream& getline ( char* s, std::streamsize count );
std::istream& getline ( char* s, std::streamsize count, char delimiter );
“`
其中,`s`是存放讀取數據的緩衝區;`count`是緩衝區的大小;`delimiter`是指定讀取數據的結束符。
示例代碼:
“`cpp
std::ifstream in_file(“test.txt”);
// 每次讀取一行
std::string line;
while (std::getline(in_file, line))
{
// 處理每一行的數據
}
// 按照指定字元讀取,例如以逗號為間隔讀取數據
std::string data;
std::getline(in_file, data, ‘,’);
“`
`get()`方法用於逐個字元地讀取數據,語法如下:
“`cpp
std::istream& get (char& c); // 讀取一個字元
std::istream& get (char* s, std::streamsize n); // 讀取指定長度的字元串
std::istream& get (char* s, std::streamsize n, char delim); // 讀取指定長度的字元串,以指定字元結束
“`
示例代碼:
“`cpp
std::ifstream in_file(“test.txt”);
char ch;
while (in_file.get(ch))
{
// 處理每個字元數據
}
char buffer[20];
in_file.get(buffer, 20); // 讀取20個字元
“`
`read()`方法可以讀取指定數量的二進位數據,語法如下:
“`cpp
std::istream& read (char* s, std::streamsize n);
“`
示例代碼:
“`cpp
std::ifstream in_file(“test.dat”, std::ios::binary);
char buffer[20];
in_file.read(buffer, 20); // 讀取20個位元組的數據
“`
寫文件
在使用文件流寫文件時,可以使用文件流對象的`put()`、`write()`和`operator<<()`等方法。
`put()`方法用於寫入一個字元,語法如下:
“`cpp
std::ostream& put (char c);
“`
示例代碼:
“`cpp
std::ofstream out_file("test.txt");
out_file.put('a');
“`
`write()`方法用於寫入二進位數據,語法如下:
“`cpp
std::ostream& write (const char* s, std::streamsize n);
“`
示例代碼:
“`cpp
std::ofstream out_file("test.dat", std::ios::binary);
char buffer[20];
out_file.write(buffer, 20);
“`
`operator<<()`方法用於寫入文本數據,語法如下:
“`cpp
std::ostream& operator<< (bool val);
std::ostream& operator<< (short val);
std::ostream& operator<< (unsigned short val);
std::ostream& operator<< (int val);
std::ostream& operator<< (unsigned int val);
std::ostream& operator<< (long val);
std::ostream& operator<< (unsigned long val);
std::ostream& operator<< (float val);
std::ostream& operator<< (double val);
std::ostream& operator<< (long double val);
std::ostream& operator<< (const void* val);
std::ostream& operator<< (std::streambuf* sb);
std::ostream& operator<< (std::ostream& (*func)(std::ostream&));
std::ostream& operator<< (std::ios& (*func)(std::ios&));
std::ostream& operator<< (std::ios_base& (*func)(std::ios_base&));
std::ostream& operator<< (const char* str);
std::ostream& operator<< (char val);
“`
示例代碼:
“`cpp
std::ofstream out_file("test.txt");
out_file << "hello world!"
<< std::endl // 換行
<< 123 << std::endl
<< 3.14159 << std::endl;
“`
三、文件流的關閉
文件流使用完畢後,需要關閉文件流,以釋放資源。可以使用文件流對象的`close()`方法來關閉文件流,語法為:
“`cpp
void close();
“`
示例代碼:
“`cpp
std::ifstream in_file(“test.txt”);
if (in_file.is_open())
{
// 執行操作
in_file.close();
}
“`
總結:使用C++文件流進行文件讀寫操作,需要注意打開方式、讀寫方式和關閉方式。通過文件流對象的方法,可以讀取和寫入文本、二進位文件,同時也具備更好的平台兼容性。
原創文章,作者:MUZM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/143570.html