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