C/C++的txt檔案基本操作

2020-08-08 13:06:17

參考鏈接:https://blog.csdn.net/freeking101/article/details/60959624

C++

認識stream

#include<iostream>//io stream
#include<fstream> //f  stream
#include<istream> //i  stream
#include<ostream> //o  stream
//……

通過上面的4個頭檔案,大家不難發現,C++有個stream類,所有的I/O都以stream爲基礎

插入器

cout<<"Hello";//<<

向流輸出數據
<<爲插入器
平時我們想要輸出一個東西時,會有一個自帶的輸出流,即cout

cout=c+out//c++輸出流

那麼我們cout<<"Hello"就會將Hello輸出到標準輸出流

析取器

int x;
cin>>x;//>>

流中輸入數據

>>爲析取器

析取器一般指的是鍵盤,所以上面程式碼中,表示從鍵盤讀取一個int型別的數位
理解了插入器和析取器,下面 下麪來看看stream的幾個標頭檔案

stream標頭檔案

ofstream:輸出流(寫)
ifstream:輸入流(讀)
fstream:檔案操作流(可讀寫)
今天講的是檔案操作,所以fstream爲主角(主角光環登場!)
在这里插入图片描述

正片開始

如何讀檔案

1.開啓檔案

fstream這個標頭檔案最拿手的就是讀寫操作辣~
開啓一個檔案,對它進行任何操作,實際就是對該檔案所做的操作
溫馨提示:

ios::out 檔案以輸出()方式開啓 
ios::in    檔案以輸入()方式開啓
ios::ate 初始位置:檔案尾
ios::app 所有輸出附加在檔案末尾
ios::trunc 如果檔案已存在則先刪除該檔案
ios::binary 二進制方式

這六種東西可以根據自己的需要自行挑選,可以用|把以上屬性連線起來
如:ios::in|ios::app
開啓方式
第一種
……我忘了,副主角好像是ifstream和ofstream
因爲它們是讀寫操作

#include<iostream>//這個要加,因爲ifstream和ofstream在這裏
#include<fstream>//主角
using namespace std;
int main()
{
	ifstream infile;
	infile.open("D:\\安安.txt",ios::out|ios::app|ios::binary);
	return 0;
}

第二種
只有一個開啓方式未免低調了一點

#include<fstream>
#include<iostream>
using namespace std;
int main()
{
	ifstream file("D:\\安安.txt",ios::out|ios::app|ios::binary);
	return 0;
}

還有更多的開啓方式,這裏不再做詳細解釋

2.關閉檔案

沒啥好說的
當檔案讀寫操作完成之後,我們必須將檔案關閉以使檔案重新變爲可存取的。關閉檔案需要呼叫成員函數close(),它負責將快取中的數據排放出來並關閉檔案。
不關閉檔案會……丟失!

ofstream infile;
infile.close();

3.讀檔案

這裏我們已經知道瞭如何開啓檔案
辣麼怎麼讀檔案呢
新副主角:assert
這是一個判斷路徑是否有錯的檔案,一蛋你路徑寫錯了,辣麼它就會……報錯!
如果路徑寫的對,繼續往下執行
具體用法如下

assert(infile.is_open());

一句話,就可以判斷路徑是否有錯
判斷路徑是否有錯知道了,辣麼怎麼讀檔案呢,你扯了半天

(800米的大刀早已飢渴)

while回圈即可解決
行行讀取(string)

#include<iostream>
#include<iostream>
#include<fstream> 
#include<cassert> 
#include<cstring>//我表示今天這個副主角我不歡迎,但要用的還要用
using namespace std;
int main()
{
	ifstream infile;
	infile.open("D:\\安安.txt",ios::out|ios::app|ios::binary);//開啓檔案
	assert(infile.is_open());//檢測路徑是否有錯
	string s;//字串爲一行
	while(getline(infile,s))//get每一行
	{
		cout<<s<<"\n";//輸出後就換行
	}
	return 0;
}

辣麼我們的讀檔案這塊部分就告一段落

如何寫檔案

1.建立檔案

無論是讀還是寫檔案,都要開啓或建立檔案
那麼剛說了ifstream是輸入流,它登場!

ifstream outfile;
outfile.open("D:\\txt.txt",ios::in||ios::app||ios::binary);//寫入檔案就要ios::in

2.寫入檔案

這裏有個容易混淆的地方,即
我們說<<是插入器,>>是析取器,那麼我們要寫入的時候要用到哪個呢
這裏給大家一個思考


Round 1
甲:我覺得應該用>>,因爲你要寫入一個檔案嘛,肯定是要用鍵盤寫入啊
甲說服率:53%
乙:我不贊同,因爲終究是要把你寫入的東西存到檔案裡的,這個步驟你還需要動鍵盤?
甲乙各佔50%


Round 2
甲:存入到檔案嘛,你是不是要把每一行存入到這個檔案,我……(好像理虧)
甲說服率:21%
乙:這個時間根本不用動鍵盤,只不過是系統幫你存到這裏去嘍
乙說服率:100%


贏主:乙
所以使用插入器是正確的
ifstream是寫,所以

ifstream outfile;
string write;
outfile<<write;
outfile.close();//關閉檔案流

其他

判斷EOF

EOF表示是否到達檔案尾,是則返回非0直,否返回0值
具體用法

if(in.eof())ShowMessage("停止!");

exit

exit表示終止程式,同時關閉緩衝區剩餘的數據輸出並關閉所有已經開啓的檔案
參數:傳參0或非0
參數含義
傳0表示程式正常停止
不傳0表示程式異常停止