c++ 檔案操作 fstream
阿新 • • 發佈:2022-04-04
5 檔案操作
程式執行時產生的資料都屬於臨時資料,程式一旦執行結束都會釋放
通過檔案可以將資料持久化
C++中對檔案操作需要含檔案頭<fstream>
檔案型別分為兩種:
- 文字檔案 - 檔案以文字的ASCII碼形式儲存在計算機中
- 二進位制檔案 - 檔案以文字的 二進位制 形式儲存在計算機中,使用者一般不能直接讀懂他們
操作檔案的三大類:
- ofstream:寫操作
- ifstream: 讀操作
- fstream: 讀寫操作
5.1 文字檔案
5.1.1 寫檔案
寫檔案步驟如下
- 1 包含標頭檔案
#include <ofstream>
- 2 建立流物件
fstream ofs;
- 3 開啟檔案
ofs.open("檔案路徑",開啟方式)
- 4 寫資料
ofs << "寫入資料"
- 5 關閉檔案
ofs.close();
檔案開啟方式
開啟方式 | 解釋 |
---|---|
ios::in | 為讀檔案而開啟檔案 |
ios::out | 為寫檔案而開啟檔案 |
ios:: ate | 初始位置:檔案尾部 |
ios::app | 追加方式寫入檔案 |
ios::trunc | 如果檔案存在,先刪除,再建立 |
ios::binary | 二進位制方式 |
注意: 檔案開啟方式可以配合使用,利用|操作符
例如:用二進位制方式寫檔案 ios::binary|ios::in
#include <iostream> #include <fstream> using namespace std; // 文字檔案寫檔案 void test01() { // 1.包含標頭檔案 // 2. 建立檔案流物件 fstream ofs; // 3. 開啟檔案 ofs.open("C:\\Users\\DSF-LSJ\\Desktop\\tests.txt",ios::out); // 沒有檔案就會建立檔案 // 4. 寫入文字 ofs << "hello word"; // 5. 關閉檔案 ofs.close(); } int main() { test01(); return 0; }
5.1.2 讀檔案
讀檔案步驟如下
- 1 包含標頭檔案
#include <ofstream>
- 2 建立流物件
fstream ifs;
- 3 開啟檔案
ifs.open("檔案路徑",開啟方式)
判斷檔案是否開啟成功 - 4 讀資料 四種方式讀取
- 5 關閉檔案
ofs.close();
判讀檔案是否開啟
if (!ifs.is_open()) {
cout << "檔案開啟失敗" << endl;
}
示例:
//#include <iostream> //#include <fstream> //using namespace std; // //// 文字檔案寫檔案 // // //void test01() { // // 1.包含標頭檔案 // // 2. 建立檔案流物件 // fstream ofs; // // 3. 開啟檔案 // ofs.open("C:\\Users\\DSF-LSJ\\Desktop\\tests.txt",ios::out); // 沒有檔案就會建立檔案 // // 4. 寫入文字 // ofs << "hello word"; // // 5. 關閉檔案 // ofs.close(); //} // // //int main() { // test01(); // return 0; //} // 讀檔案 #include <iostream> #include <fstream> using namespace std; void test01() { // 1. 匯入檔案頭 // 2. 建立檔案流物件 fstream ifs; // 3. 開啟檔案 ifs.open("C:\\Users\\DSF-LSJ\\Desktop\\test.txt", ios::in); if (!ifs.is_open()) { cout << "檔案開啟失敗" << endl; } // 第一種 建立char陣列 通過迴圈拿到 //char buf[1024] = { 0 }; //while (ifs>>buf) { // cout << buf << endl; //} // 第二種 char buf[1024] = { 0 }; while (ifs.getline(buf,sizeof(buf))) { cout << buf << endl; } ifs.close(); // 第三種 // pass 全域性getline ... // 第四種 //char c; //while ( (c = ifs.get()) != EOF) { // EOF end of file 是否讀到檔案尾部 // cout << c; //} } int main() { test01(); return 0; }
5.2 二進位制檔案
以二進位制的方式進行讀寫操作
開啟方式指定為: ios::binary
5.2.1 寫檔案
二進位制方式寫檔案主要利用物件呼叫成員函式write
函式原型:ostream & write(const char *buffer ,int len)
引數解釋: 字元指標buffer 指向記憶體中一段儲存空間,len是讀寫的位元組數
示例:
#include <iostream>
#include <fstream>
using namespace std;
// 二進位制寫檔案
class Person {
public:
char m_Name[64]; // 姓名
int m_Age; // 年齡
};
void test01() {
// 1.包含標頭檔案
// 2.建立流物件
fstream ofs;
// 3.開啟檔案
ofs.open("test.txt",ios::out|ios::binary);
// 4.寫入檔案 *******************************
Person p = { "張三",18 };
ofs.write((const char*)&p, sizeof(Person));
// 5.關閉檔案
ofs.close();
}
int main() {
test01();
return 0;
}
5.2.2 讀檔案
二進位制方式讀檔案主要利用流物件呼叫成員函式read
函式原型:istream& read(char * buffer,int len)
引數解釋: 字元指標buffer指向一段記憶體空間,len是讀寫的位元組數
示例:
#include <iostream>
#include <fstream>
using namespace std;
// 二進位制讀檔案
class Person {
public:
char m_Name[64]; // 姓名
int m_Age; // 年齡
};
void test01() {
// 1.包含標頭檔案
// 2.建立流物件
fstream ofs;
// 3.開啟檔案
ofs.open("test.txt", ios::in | ios::binary);
// 4.讀檔案 **************************
Person p;
ofs.read((char * )&p, sizeof(Person));
cout << p.m_Age << endl;
cout << p.m_Name << endl;
// 5.關閉檔案
ofs.close();
}
int main() {
test01();
return 0;
}