使用C++文件流進行文件讀寫操作

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-hk/n/143570.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
MUZM的頭像MUZM
上一篇 2024-10-22 23:34
下一篇 2024-10-22 23:34

相關推薦

發表回復

登錄後才能評論