學習c++ofstream和ifstream


定義數據流對象指針

對文件進行讀寫操作首先必須要定義一個數據流對象指針,數據流對象指針有三種類型,它們分別是:
Ifstream:表示讀取文件流,使用的時候必須包含頭文件“ifstream”;
ofstream:表示文件寫入流,使用的時候必須包含頭文件“ofstream”;
fstream:表示文件讀取/寫入流,使用的時候必須包含頭文件“fstream”;

ofstream是從內存到硬盤,ifstream是從硬盤到內存

打開文件

打開文件有兩種方式。一種其一是使用open函數,其二是使用數據流對象的構造函數。這兩個函數調用的參數基本上一致的。

ofstream outfile;
outfile.open("file.dat", ios::out | ios::in );
參數 打開方式
ios::in 為輸入(讀)打開文件
ios::out 為輸出(寫)打開文件
ios::app 所有輸出附加在文件末尾
ios::trunc 若文件已存在先刪除文件
ios::binary 二進制方式

文件讀寫操作

由於類ofstream, ifstream 和fstream 是分別從ostream, istream 和iostream 中引申而來的,所以文件的讀寫操作與使用控制台函數cin和cout一樣,“<<”表示對文件進行寫操作,“>>”表示對文件進行讀操作。根據數據流讀寫的狀態,有4個驗證函數,它們分別是:
· bad()
如果在讀寫過程中出錯,返回 true 。例如:當我們要對一個不是打開為寫狀態的文件進行寫入時,或者我們要寫入的設備沒有剩余空間的時候。
· fail()
除了與bad() 同樣的情況下會返回 true 以外,加上格式錯誤時也返回true ,例如當想要讀入一個整數,而獲得了一個字母的時候。
· eof()
如果讀文件到達文件末尾,返回true。
· good()
這是最通用的:如果調用以上任何一個函數返回true 的話,此函數返回 false 。

獲得或設置流指針

Long tellg() 和 long tellp()這兩個成員函數不用傳入參數,返回一個整數。tellg()用於.ifstream,指向下一個將被讀取的元素。tellp()用於.ofstream,指向寫入下一個元素的位置。
seekp:設置輸出文件流的文件流指針位置
seekg:設置輸入文件流的文件流指針位置

關閉文件

close();

例子

  • 向文件中寫入數據
#include<iostream> 
#include<fstream>
using namespace std;
int main()
{
	ofstream file1("C:/Users/Mac/Desktop/1234.txt");
	if(!file1)
	{
		cout<<"文件不能打開"<<endl;
	}
	else
	{
		file1<<"learning ios is very useful!"<<endl;
		file1<<"1 2 3 4 "<<endl;
	}
	file1.close();
}

  • 逐詞讀取
#include<iostream> 
#include<fstream>
using namespace std;
int main()
{  
    ifstream file2("C:/Users/Mac/Desktop/1234.txt");
	if(!file2)
	{
		cout<<"文件不能打開"<<endl; 
	}
	else
	{
	string s;
	while(file2>>s)
	{
		
		cout<<s<<endl;
	}
	file2.close();
	}
 } 	

  • 逐行讀取,行存入字符數組
#include<iostream> 
#include<fstream>
using namespace std;
int main()
{  
    ifstream file2("C:/Users/Mac/Desktop/1234.txt");
	if(!file2)
	{
		cout<<"文件不能打開"<<endl; 
	}
	else
	{
	char s[100];
	while(file2.getline(s,100))
	{
		
		cout<<s<<endl;
	}
	file2.close();
	}
 } 	

  • 逐行讀取,行存入字符串
#include<iostream> 
#include<fstream>
using namespace std;
int main()
{  
    ifstream file2("C:/Users/Mac/Desktop/1234.txt");
	if(!file2)
	{
		cout<<"文件不能打開"<<endl; 
	}
	else
	{
	string s;
	while(getline(file2,s))
	{
		
		cout<<s<<endl;
	}
	file2.close();
	}
 } 	

結果如上圖

參考資料1 2
問題 (1)多打一行(2)文件地址要轉義


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM