我快速入門python看過的一些資料 B站的視頻 10天自學Python,輕鬆掌握Python基礎【千鋒】 廖雪峰 - Python教程 https://www.liaoxuefeng.com/wiki/1016959663602400 C語言網 - Python教程 https://www.dot ...
5 文件操作
程式運行時產生的數據都屬於臨時數據,程式一旦運行技術都會被釋放,通過文件可以將數據持久化。
C++中隊文件操作需要包含頭文件#include <fsteam>
文件類型分為兩種:
- 文本文件:文件以文本的ASCII碼形式存儲在電腦中
- 二進位文件:文件以文本的二進位形式存在電腦中,用戶一般不會直接讀懂他們
操作文件的三大類:
- ofstream:寫操作
- ifstream:讀操作
- fstream:讀寫操作
5.1 文本文件
5.1.1 寫文件
寫文件步驟如下:
- 包含頭文件
#include <fstream>
- 創建流對象
ofstream ofs;
- 打卡文件
ofs.open("文件路徑", 打開方式);
- 寫數據
ofs << "寫入的數據";
- 關閉文件
ofs.close();
文件打開方式:
打開方式 | 解釋 |
---|---|
ios::in | 為讀文件而打開文件 |
ios::out | 為寫文件而打開文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 追加方式寫文件 |
ios::trunc | 如果文件存在先刪除,再創建 |
ios::binary | 二進位方式 |
註意:文件打開方式可以配合使用,利用|
操作符號
例如:
用二進位方式寫文件ios::binary | ios:: out
示例:
#include <iostream>
using namespace std;
#include <fstream>
//文本文件 寫文件
void test01()
{
//1、包含頭文件 fstream
//2、創建流對象
ofstream ofs;
//3、指定打開方式
ofs.open("test.txt", ios::out);
//4、寫內容
ofs << "姓名:張三" << endl;
ofs << "性別:未知" << endl;
//5、關閉文件
ofs.close();
}
int main()
{
test01();
system("pause");
return 0;
}
總結:
- 文件操作必須包含頭文件 fstream
- 讀文件可以利用ofstream,或者fstream類
- 打文件時需要指定操作文件的路徑,以及打開方式
- 利用 << 可以向文件中寫數據
- 操作完畢,要關閉文件
5.1.2 讀文件
讀文件與寫文件步驟相似,但是讀取方式相對比較多
讀文件步驟如下:
- 包含頭文件
#include <fstream>
- 創建流對象
ifstream ifs;
- 打開文件並判斷文件是否發開成功
ifs.open("文件路徑",打開方式);
- 讀數據 四種方式讀取
- 關閉文件 ifs.close()
示例:
#include<iostream>
using namespace std;
#include<fstream>
#include<string>
//文本文件讀文件
void test01()
{
//1、包含頭文件
//2、創建流對象
ifstream ifs;
//3、打開文件 並且判斷是否打開成功
ifs.open("test.txt", ios::in);
if (!ifs.is_open())
{
cout << "文件打開失敗!" << endl;
return;
}
else
{
cout << "文件打開成功!" << endl;
}
//4、讀文件 //分別註釋別的方式檢驗某個方式
//第一種
char buf1[1024] = { 0 };
while (ifs >> buf1)
{
cout << buf1 << endl;
}
//第二種
char buf2[1024] = { 0 };
while (ifs.getline(buf2, 1024))
{
cout << buf2 << endl;
}
//第三種
string buf3;
while (getline(ifs, buf3))
{
cout << buf3 << endl;
}
//第四種 不推薦使用
char c;
while ((c = ifs.get()) != EOF) //如果沒有讀到文件尾End of File 文件尾的標誌
{
cout << c << endl;
}
//5、關閉文件
ifs.close();
}
int main()
{
test01();
system("pause");
return 0;
}
總結:
- 讀文件可以利用ifstream,或者fstream類
- 利用is_open函數可以以判斷文件是否打開成功
- close關閉文件
5.2 二進位文件
以二進位的方式對文件進行讀寫操作,打開方式要指定為 ios::binary
5.2.1 寫文件
二進位寫文件主要利用流對象調用成員函數write()
函數圓形:ostream& write(const char * buffer, int len);
參數解釋:字元指定buffer指向記憶體中一段存儲空間,len是讀寫的位元組數
示例:
#include<iostream>
using namespace std;
#include<fstream>
//二進位文件 寫文件
class Person
{
public:
char m_Name[64];//建議不要用string 用 c語言的 char
int m_Age;//年齡
};
void test01()
{
//1、包含頭文件
//2、創建流對象
ofstream ofs;
//3、打開文件
ofs.open("5.2.1person.txt", ios::out | ios::binary);
//4、寫文件
Person p = { "張三",18 };
ofs.write((const char *) & p, sizeof(Person));
//5、關閉文件
ofs.close();
}
int main()
{
test01();
system("pause");
return 0;
}
總結:
- 文件輸出流對象,可以通過write函數,以二進位方式寫文件
5.2.2 讀文件
二進位文件讀文件主要利用流對象調用成員函數read
函數原型:istream& read(char *buffer, int len);
參數解釋:字元指針buffer指向記憶體中一段存儲空間,len是讀寫的位元組數
示例:
#include <iostream>
using namespace std;
#include <fstream>
//二進位文件的讀文件操作
class Person
{
public:
char m_Name[64];
int m_Age;
};
//二進位文件 讀文件
void test01()
{
//1、包含頭文件
//2、創建流對象
ifstream ifs;
//3、打開文件,判斷文件是否打開成功
ifs.open("5.2.1person.txt", ios::in | ios::binary);
if (!ifs.is_open())
{
cout << "文件打開失敗!" << endl;
return;
}
else
{
cout << "文件打開成功!" << endl;
}
//4、讀文件
Person p;
ifs.read((char*)&p, sizeof(Person));
cout << "姓名:" << p.m_Name << " 年齡:" << p.m_Age << endl;
//5、關閉文件
ifs.close();
}
int main()
{
test01();
system("pause");
return 0;
}
總結:
- 文件輸入流對象可以通過read函數,以二進位方式讀數據