【黑马程序员 C++教程从0到1入门编程】【笔记6】C++核心编程(文件操作)
文章目錄
- 5 文件操作
- 5.1文本文件
- 5.1.1寫(xiě)文件
- 5.1.2讀文件
- 5.2 二進(jìn)制文件
- 5.2.1 寫(xiě)文件(用二進(jìn)制方式寫(xiě)時(shí)最好別用c++的string)
- 5.2.2 讀文件
https://www.bilibili.com/video/BV1et411b73Z?p=143
5 文件操作
程序運(yùn)行時(shí)產(chǎn)生的數(shù)據(jù)都屬于臨時(shí)數(shù)據(jù),程序一旦運(yùn)行結(jié)束都會(huì)被釋放,所以要把重要的數(shù)據(jù)保存下來(lái)
通過(guò)文件可以將數(shù)據(jù)持久化
C++中對(duì)文件操作需要包含頭文件 < fstream >
文件類型分為兩種:
操作文件的三大類:
5.1文本文件
5.1.1寫(xiě)文件
寫(xiě)文件步驟如下:
包含頭文件
#include <fstream>
創(chuàng)建流對(duì)象
ofstream ofs;
打開(kāi)文件
ofs.open(“文件路徑”,打開(kāi)方式);
寫(xiě)數(shù)據(jù)(左移運(yùn)算符)
ofs << “寫(xiě)入的數(shù)據(jù)”;
關(guān)閉文件
ofs.close();
文件打開(kāi)方式:
| ios::in | 為讀文件而打開(kāi)文件 |
| ios::out | 為寫(xiě)文件而打開(kāi)文件 |
| ios::ate | 初始位置:文件尾 |
| ios::app | 追加方式寫(xiě)文件 |
| ios::trunc | 如果文件存在先刪除,再創(chuàng)建 |
| ios::binary | 二進(jìn)制方式 |
注意: 文件打開(kāi)方式可以配合使用,利用|操作符
例如:用二進(jìn)制方式寫(xiě)文件 ios::binary | ios:: out
示例:
//#include <iostream> #include <fstream> using namespace std;void test01() {ofstream ofs;ofs.open("test.txt", ios::out);ofs << "姓名:張三" << endl;ofs << "性別:男" << endl;ofs << "年齡:18" << endl;ofs.close(); }int main() {test01();system("pause");return 0; }
總結(jié):
- 文件操作必須包含頭文件 fstream
- 讀文件可以利用 ofstream ,或者fstream類
- 打開(kāi)文件時(shí)候需要指定操作文件的路徑,以及打開(kāi)方式
- 利用<<可以向文件中寫(xiě)數(shù)據(jù)
- 操作完畢,要關(guān)閉文件
5.1.2讀文件
讀文件與寫(xiě)文件步驟相似,但是讀取方式相對(duì)于比較多
讀文件步驟如下:
包含頭文件
#include <fstream>
創(chuàng)建流對(duì)象
ifstream ifs;
打開(kāi)文件并判斷文件是否打開(kāi)成功
ifs.open(“文件路徑”,打開(kāi)方式);
讀數(shù)據(jù)
四種方式讀取
關(guān)閉文件
ifs.close();
示例:
#include <iostream> using namespace std; #include <fstream> #include <string>void test01() {ifstream ifs; //創(chuàng)建操作流對(duì)象ifs.open("test.txt", ios::in); //設(shè)置操作文件路徑和操作文件方式if (!ifs.is_open()) //判斷文件是否打開(kāi)成功{cout << "文件打開(kāi)失敗" << endl;return;}//第一種方式//char buf[1024] = { 0 };//while (ifs >> buf) //讀到換行符,讀到數(shù)據(jù)返回true,沒(méi)讀到返回false//{// cout << buf << endl;//}//第二種(通過(guò)ifstream::getline函數(shù))//char buf[1024] = { 0 };//while (ifs.getline(buf,sizeof(buf)))//{// cout << buf << endl;//}//第三種string buf; while (getline(ifs, buf)) //注意getline第二個(gè)參數(shù)必須要是std::string類型{cout << buf << endl;}//第四種(不推薦,一個(gè)字符一個(gè)字符讀,太慢了【真實(shí)性有待確認(rèn)!】)/*char c;while ((c = ifs.get()) != EOF){cout << c;}ifs.close();*/}int main() {test01();system("pause");return 0; }運(yùn)行結(jié)果:
姓名:張三 性別:男 年齡:18總結(jié):
- 讀文件可以利用 ifstream ,或者fstream類
- 利用is_open函數(shù)可以判斷文件是否打開(kāi)成功
- close 關(guān)閉文件
5.2 二進(jìn)制文件
以二進(jìn)制的方式對(duì)文件進(jìn)行讀寫(xiě)操作
打開(kāi)方式要指定為 ios::binary
5.2.1 寫(xiě)文件(用二進(jìn)制方式寫(xiě)時(shí)最好別用c++的string)
二進(jìn)制方式寫(xiě)文件主要利用流對(duì)象調(diào)用成員函數(shù)write
函數(shù)原型 :ostream& write(const char * buffer,int len);
參數(shù)解釋:字符指針buffer指向內(nèi)存中一段存儲(chǔ)空間。len是讀寫(xiě)的字節(jié)數(shù)
示例:
#include <fstream> #include <string> using namespace std;class Person { public:char m_Name[64]; //二進(jìn)制寫(xiě)最好用c語(yǔ)言的字符數(shù)組,別用c++的stringint m_Age; };//二進(jìn)制文件 寫(xiě)文件 void test01() {//1、包含頭文件//2、創(chuàng)建輸出流對(duì)象ofstream ofs("person.txt", ios::out | ios::binary);//3、打開(kāi)文件//ofs.open("person.txt", ios::out | ios::binary);Person p = { "張三" , 18 };//4、寫(xiě)文件ofs.write((const char*)&p, sizeof(p)); //不是復(fù)雜,是函數(shù)數(shù)據(jù)類型要求,所以要把指針強(qiáng)制轉(zhuǎn)換一下//5、關(guān)閉文件ofs.close(); }int main() {test01();system("pause");return 0; }
總結(jié):
- 文件輸出流對(duì)象 可以通過(guò)write函數(shù),以二進(jìn)制方式寫(xiě)數(shù)據(jù)
5.2.2 讀文件
二進(jìn)制方式讀文件主要利用流對(duì)象調(diào)用成員函數(shù)read
函數(shù)原型:istream& read(char *buffer,int len);
參數(shù)解釋:字符指針buffer指向內(nèi)存中一段存儲(chǔ)空間。len是讀寫(xiě)的字節(jié)數(shù)
示例:
#include <fstream> #include <string> using namespace std; #include <iostream>class Person { public:char m_Name[64];int m_Age; };void test01() {ifstream ifs("person.txt", ios::in | ios::binary);if (!ifs.is_open()){cout << "文件打開(kāi)失敗" << endl;}Person p;ifs.read((char*)&p, sizeof(p)); //對(duì)象p整體寫(xiě)入,再整體讀取cout << "姓名: " << p.m_Name << " 年齡: " << p.m_Age << endl; }int main() {test01();system("pause");return 0; }運(yùn)行結(jié)果:
姓名: 張三 年齡: 18- 文件輸入流對(duì)象 可以通過(guò)read函數(shù),以二進(jìn)制方式讀數(shù)據(jù)
總結(jié)
以上是生活随笔為你收集整理的【黑马程序员 C++教程从0到1入门编程】【笔记6】C++核心编程(文件操作)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 文本文件与二进制文件及编码关系
- 下一篇: vscode 代码莫名爆红(未定义标识符