目錄
- 檔案操作
- 文字檔案
- 寫檔案
- 文字檔案
- include
- 讀檔案
- include
- 二進位制檔案
- 寫檔案
- 讀檔案
- 二進位制檔案
檔案操作
程式執行時產生的資料都屬於臨時資料,程式一旦執行結束都會被釋放
透過檔案可以將資料持久化
c++中對檔案操作需要包含標頭檔案
檔案型別分為兩種:
- 文字檔案 - 檔案以文字的ASCII碼形式儲存在計算機中
- 二進位制檔案 - 檔案以文字的二進位制形式儲存在計算機中
操作檔案的三大類:
- ofstream:寫操作
- ifstream:讀操作
- fstream:讀寫操作
文字檔案
寫檔案
寫檔案步驟如下:
-
包含標頭檔案
include
-
建立流物件
ofstream ofs;
-
開啟檔案
ofs.open("檔案路徑", 開啟方式);
-
寫資料
ofs << "寫入的資料";
-
關閉檔案
ofs.close();
檔案開啟方式:
開啟方式 | 解釋 |
---|---|
ios::in | 為讀檔案而開啟檔案 |
ios::out | 為寫檔案而開啟檔案 |
ios::ate | 初始位置:檔案尾 |
ios::app | 追加方式寫檔案 |
ios::trunc | 如果檔案存在,先刪除再建立 |
ios::binary | 二進位制方式 |
注意:檔案開啟方式可以配合使用,利用 | 運算子
例如:用二進位制方式寫檔案 ios::binary | ios::out
void test01()
{
//寫資料
ofstream ofs;
ofs.open("test.txt", ios::out);
ofs << "name: little john" << endl;
ofs << "gender: male" << endl;
ofs << "age: 18" << endl;
ofs.close();
}
讀檔案
寫檔案步驟如下:
-
包含標頭檔案
include
-
建立流物件
ifstream ifs;
-
開啟檔案並判斷檔案是否開啟成功
ifs.open("檔案路徑", 開啟方式);
-
讀資料
四種方式讀取
-
關閉檔案
ifs.close();
void test01()
{
ifstream ifs;
ifs.open("test.txt", ios::in);
if (!ifs.is_open()) cout << "file open false" << endl;
else cout << "file open success" << endl;
//讀資料
//1.
char buf1[1024] = {0};
while ( ifs >> buf1 )
{
cout << buf1 << endl;
}
//2.
char buf2[1024] = {0};
while (ifs.getline(buf2,sizeof(buf2)))
{
cout << buf2 << endl;
}
//3.
string buf3;
while (getline(ifs, buf3))
{
cout << buf3 << endl;
}
//4.
char c;
while ((c = ifs.get()) != EOF)
{
cout << c;
}
ifs.close();
}
二進位制檔案
以二進位制的方式對檔案進行讀寫操作
開啟方式要指定為ios::binary
寫檔案
二進位制檔案寫檔案主要利用流物件呼叫成員函式write
函式原型:ostream& write(const char * buffer, int len);
引數解釋:字元指標buffer指向記憶體中一段儲存空間。len是讀寫的位元組數
//二進位制檔案 寫檔案
class Person
{
public:
char m_Name[64];
int m_Age;
};
void test01()
{
ofstream ofs("person.txt", ios::out | ios::binary);
Person p = {"John", 18};
ofs.write((const char *)&p, sizeof(Person) );
ofs.close();
}
讀檔案
二進位制方式讀檔案主要利用流物件呼叫成員函式read
函式原型:istream& read(char * buffer, int len);
引數解釋:字元指標buffer指向記憶體中一段儲存空間。len是讀寫的位元組數
void test02()
{
ifstream ifs("person.txt", ios::in | ios::binary);
if (!ifs.is_open()) cout<<"false"<<endl;
Person p;
ifs.read((char *)&p, sizeof(Person));
cout<<"name:" <<p.m_Name<<" age:"<<p.m_Age<<endl;
ifs.close();
}