芯片設(shè)計公司重慶 seo
?
?引子:
程序運行時產(chǎn)生的數(shù)據(jù)都屬于臨時數(shù)據(jù),程序一旦運行結(jié)束都會被釋放通過文件可以將數(shù)據(jù)持久化。C++中對文件操作需要包含頭文件< fstream > 。
C++提供了豐富的文件操作功能,你可以使用標(biāo)準(zhǔn)庫中的fstream庫來進行文件的讀取、寫入和定位等操作。文件操作在許多應(yīng)用中非常常見,例如讀取配置文件、處理日志、存儲數(shù)據(jù)等。
首先,你需要包含`<fstream>`頭文件,然后可以創(chuàng)建不同類型的文件流對象,如ifstream、ofstream和fstream,它們分別用于讀取、寫入和讀寫文件。
對于文件的讀取,你可以使用ifstream對象。通過調(diào)用`open()`函數(shù)并指定文件名,你可以打開一個文件進行讀取操作。然后,你可以使用`>>`和其他輸入操作符從文件中讀取數(shù)據(jù),或者使用`getline()`函數(shù)逐行讀取文件內(nèi)容。
對于文件的寫入,你可以使用ofstream對象。同樣,通過調(diào)用`open()`函數(shù)并指定文件名,你可以打開一個文件進行寫入操作。然后,你可以使用`<<`和其他輸出操作符將數(shù)據(jù)寫入文件中。
除了讀取和寫入文件,你還可以使用fstream對象進行讀寫混合的文件操作。例如,你可以使用`seekg()`和`seekp()`函數(shù)定位文件指針,以便在文件中進行隨機讀寫操作。`tellg()`和`tellp()`函數(shù)可以獲取文件指針的當(dāng)前位置。
在進行文件操作時,記得檢查文件是否成功打開,并確保在不再需要使用文件時關(guān)閉它。你可以使用`is_open()`函數(shù)檢查文件是否成功打開,使用`close()`函數(shù)關(guān)閉文件。
除了基本的文件讀寫操作,C++還提供了其他功能,如二進制文件的讀寫、文件的追加寫入、文件錯誤處理等。你可以根據(jù)具體需求查閱C++的相關(guān)文檔,深入學(xué)習(xí)和應(yīng)用這些功能。
在進行文件操作時,應(yīng)注意文件路徑的正確性,避免發(fā)生文件找不到或無法讀取的問題。此外,操作文件時要考慮文件鎖定和并發(fā)訪問等問題,確保線程安全性和資源的正常釋放。
總之,C++的文件操作功能非常強大和靈活,使你能夠輕松處理各種文件操作需求。合理運用文件操作,可以簡化代碼、提高效率,并為數(shù)據(jù)的存儲和管理提供便利。
?
一.基本知識:?
1.1文件類型
文件類型分為兩種:
1.文本文件–文件以文本的ASCII碼形式存儲在計算機中。
2二進制文件·文件以文本的二進制形式存儲在計算機中,用戶一般不能直接讀懂它們。
1.2操作文件分類?
?操作文件的三大類:
1. ifstream:讀操作? ? ?io對應(yīng)讀寫
2.ofstream:寫操作
3. fstream :讀寫操作
1.3文件步驟
1.包含頭文件
#include <fstream>2.創(chuàng)建流對象
ofstream ofs;3.打開文件
ofs.open("文件路徑",打開方式);4.寫數(shù)據(jù)
ofs <<"寫入的數(shù)據(jù)";5.關(guān)閉文件
ofs.close();
1.4文件打開方式
ios.in | 為讀文件而打開文件 |
ios:out | 為寫文件而打開文件 |
ios:.ate | 初始位置:文件尾 |
ios:.app | 追加方式寫文件 |
ios::trunc | 如果文件存在先刪除,再創(chuàng)建 |
ios::binary | 二進制方式 |
注意:文件打開方式可以配合使用,利用|操作符例如:用二進制方式寫文件ios::binary |ios: : out
?寫文件代碼實例:
#include <iostream>
#include <fstream>
using namespace std;
void fun() {//1.頭文件//2.創(chuàng)建流對象fstream ofs;//3.指定打開方式ofs.open("test.txt", ios::out);//4.寫內(nèi)容ofs << "姓名:張三" << endl;ofs << "性別:男" << endl;//5.關(guān)閉文件ofs.close();
}
int main() {fun();return 0;
}
寫文件可以用ofstream或?fstream?
讀文件代碼實例:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void fun() {//1.頭文件//2.創(chuàng)建流對象fstream ofs;//3.指定打開方式ofs.open("test.txt", ios::out);//4.寫內(nèi)容ofs << "姓名:張三" << endl;ofs << "性別:男" << endl;//5.關(guān)閉文件ofs.close();
}void fun1() {ifstream ofs;ofs.open("test.txt", ios::in);//ofs.is_open()打開失敗返回falseif (!ofs.is_open()) {cout << "文件打開失敗" << endl;}//讀數(shù)據(jù)// //第一種char buf[1024] = { 0 };//ofs按行輸入到buf中,每次循環(huán)覆蓋上一次while (ofs >> buf) {cout << buf << endl;}//第二種char buf1[1024] = { 0 };//和第一種一樣,限定最大的大小while(ofs.getline(buf1, sizeof(buf1)) ){cout << buf1 << endl;}//第三種string buf2;//從ofs輸入到buf2中while (getline(ofs, buf2)) {cout << buf2 << endl;}//第四種,不推薦char c;while ((c=ofs.get())!=EOF) {cout << c;}ofs.close();
}
int main() {fun();fun1();return 0;
}
總結(jié):
·讀文件可以利用ifstream ,或者ftream類·利用is_open函數(shù)可以判斷文件是否打開成功
. close關(guān)閉文件
二.二進制讀取和寫入
代碼實例:
#include <iostream>
//1.頭文件
#include <fstream>
using namespace std;
class person {
public:int age;const char *name; //C++要加const,學(xué)到了
};void fun() {//2.打開數(shù)據(jù)流(讀寫模式)fstream ofs;//3.打開文件ofs.open("erjinzhi.txt", ios::out | ios::binary);//4.寫數(shù)據(jù)person p;p.age = 18;p.name = "tom";ofs.write((const char*)&p,sizeof(person));p.age = 19;p.name = "tony";ofs.write((const char*)&p, sizeof(person));//5.關(guān)閉文件ofs.close();
}void read() {//2.打開數(shù)據(jù)流模式fstream ofs;//3.打開文件ofs.open("erjinzhi.txt", ios::in | ios::binary);if (!ofs.is_open()) {cout << "打開失敗" << endl;}//4.讀數(shù)據(jù)person p;ofs.read((char*)&p, sizeof(p));cout << p.age << endl;cout << p.name << endl;ofs.read((char*)&p, sizeof(p));cout << p.age << endl;cout << p.name << endl;ofs.close();
}
int main() {fun(); //寫文件read();return 0;
}
ofs.write((const char*)&p,sizeof(person));
ofs.open("erjinzhi.txt", ios::in | ios::binary);
注意這兩個函數(shù)的用法即可