C++ 檔案操作
阿新 • • 發佈:2020-12-13
技術標籤:C++基礎
檔案操作
文章目錄
程式執行時產生的資料屬於臨時資料,程式一旦執行結束都會被釋放
通過 檔案可以將資料持久化
C++中對檔案操作需要包含標頭檔案 <fstream>
檔案型別分為兩種:
- 文字檔案 - 檔案以文字的ASCII碼形式儲存在計算機中
- 二進位制檔案 - 檔案以文字的二進位制形式儲存在計算機中,使用者一般不能直接讀懂他們
操作檔案的三大類:
3. ofstream: 寫操作
4. ifstream:讀操作
5. fstream: 讀寫操作
1文字檔案
1.1 寫檔案
寫檔案步驟:
- 包含標頭檔案
#include - 建立流物件
//fstream ofs;
ofstream ofs; - 開啟檔案
ofs.open(“檔案路徑”, 開啟方式); - 寫資料
ofs << “寫入的資料”; - 關閉檔案
檔案開啟方式:
開啟方式
開啟方式 | 解釋 |
---|---|
ios::in | 為讀檔案而開啟檔案 |
ios::out | 為寫檔案而開啟檔案 |
ios::ate | 初始位置: 檔案尾 |
ios::app | 追加方式寫檔案 |
ios::trunc | 如果檔案存在先刪除,再建立 |
ios::binary | 二進位制方式 |
注意:檔案開啟方式可以配合使用,利用 | 操作符
示例:
#include <fstream>
void test()
{
//1. 建立流物件
ofstream ofs;
//2. 開啟檔案
ofs.open("test.txt", ios::out);
//3. 寫入資料
ofs << "Lily" << " 19";
//4. 關閉檔案
ofs.close();
}
檔案儲存在當前專案所在的資料夾下
1.2 讀檔案
讀檔案和寫檔案步驟相似,但是讀取方式相對比較多
讀檔案步驟:
- 包含標頭檔案
#include - 建立流物件
//fstream ifs;
ifstream ifs; - 開啟檔案並判斷是否開啟成功
- 讀資料
四種方式讀取 - 關閉檔案
ifs.close();
示例:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void test()
{
//建立輸出流物件
ifstream ifs;
//開啟檔案並判斷檔案是否開啟成功
ifs.open("test.txt", ios::in);
if (!ifs.is_open())
{
cout << "開啟失敗" << endl;
return;
}
//第一種
//char buf[1024] = { 0 };//初始化字元陣列
檔案讀到結束,返回一個為假的標誌,退出while迴圈
//while (ifs >> buf)
//{
// cout << buf << endl;
//}
//第二種
//char buf[1024] = { 0 };
//while (ifs.getline(buf, sizeof(buf)))//每一行讀取
//{
// cout << buf << endl;
//}
//第三種 全域性函式
string buf;
while (getline(ifs, buf))
{
cout << buf << endl;
}
第四種 不推薦 按單個字元一個一個的讀取
//char c;
//while ((c = ifs.get()) != EOF)
//{
// cout << c << endl;
//}
ifs.close();
}
2. 二進位制檔案
以二進位制的方式對檔案進行讀寫操作
開啟方式要指定為: ios::binary
2.1 寫檔案
二進位制方式寫檔案主要利用流物件呼叫成員函式 write
函式原型:
ostream& write(const char* buffer, int len);
引數解釋: 字元指標buffer指向記憶體中一段儲存空間。len是讀寫的位元組數
示例:
//1. 建立流物件
ofstream ofs("person.txt", ios::out | ios::binary);
//2. 開啟檔案
//ofs.open("person.txt", ios::out | ios::binary);
//3. 寫檔案
Person p("Lily", 29);
ofs.write((const char*)&p, sizeof(Person));
//4. 關閉檔案
ofs.close();
2.2 讀檔案
二進位制方式讀檔案主要利用流物件呼叫成員函式read
函式原型:
ifstream(char* buff, int len);
引數解釋: 字元指標 buffer 指向記憶體中一段儲存空間。len是讀寫的位元組數
示例:
Person p;
ifstream ifs;
ifs.open("person.txt", ios::in | ios::binary);
if (!ifs.is_open())
{
cout << "開啟失敗" << endl;
return;
}
ifs.read((char*)&p, sizeof(Person));
cout << p.m_Age << p.m_Name << endl;
ifs.close();