1. 程式人生 > 其它 >C++ 檔案操作

C++ 檔案操作

技術標籤:C++基礎

檔案操作

文章目錄


程式執行時產生的資料屬於臨時資料,程式一旦執行結束都會被釋放
通過 檔案可以將資料持久化

C++中對檔案操作需要包含標頭檔案 <fstream>

檔案型別分為兩種:

  1. 文字檔案 - 檔案以文字的ASCII碼形式儲存在計算機中
  2. 二進位制檔案 - 檔案以文字的二進位制形式儲存在計算機中,使用者一般不能直接讀懂他們

操作檔案的三大類:
3. ofstream: 寫操作
4. ifstream:讀操作
5. fstream: 讀寫操作

1文字檔案

1.1 寫檔案

寫檔案步驟:

  1. 包含標頭檔案
    #include
  2. 建立流物件
    //fstream ofs;
    ofstream ofs;
  3. 開啟檔案
    ofs.open(“檔案路徑”, 開啟方式);
  4. 寫資料
    ofs << “寫入的資料”;
  5. 關閉檔案
    檔案開啟方式:
    開啟方式
開啟方式解釋
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 讀檔案

讀檔案和寫檔案步驟相似,但是讀取方式相對比較多

讀檔案步驟:

  1. 包含標頭檔案
    #include
  2. 建立流物件
    //fstream ifs;
    ifstream ifs;
  3. 開啟檔案並判斷是否開啟成功
    ifs.open(“檔案路徑”, 開啟方式);
  4. 讀資料
    四種方式讀取
  5. 關閉檔案
    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();