天天看點

C++輸入輸出檔案流[通俗易懂]

大家好,又見面了,我是你們的朋友全棧君。

文章目錄
  • 一、C++輸入輸出
  • 二、檔案流
  • 例題:讀取字母

一、C++輸入輸出

I/O 庫頭檔案

下列的頭檔案在 C++ 程式設計中很重要。

C++輸入輸出檔案流[通俗易懂]

标準輸出流(cout)

預定義的對象 cout 是 iostream 類的一個執行個體。cout 對象“連接配接”到标準輸出裝置,通常是顯示屏。cout 是與流插入運算符 << 結合使用的。

标準輸入流(cin)

預定義的對象 cin 是 iostream 類的一個執行個體。cin 對象附屬到标準輸入設

備,通常是鍵盤。cin 是與流提取運算符 >> 結合使用的。

标準錯誤流(cerr)

預定義的對象 cerr 是 iostream 類的一個執行個體。cerr 對象附屬到标準錯誤 裝置,通常也是顯示屏,但是 cerr 對象是非緩沖的,且每個流插入到 cerr 都 會立即輸出。

cerr 也是與流插入運算符 << 結合使用的。

标準日志流(clog)

預定義的對象 clog 是 iostream 類的一個執行個體。clog 對象附屬到标準錯誤裝置,通常也是顯示屏,但是 clog 對象是緩沖的。這意味着每個流插入到 clog 都會先存儲在緩沖在,直到緩沖填滿或者緩沖區重新整理時才會輸出。 clog 也是與流插入運算符 << 結合使用的。

**

二、檔案流

**

C++檔案和流

當我們學會了資料的流入和流出之後,下面我們來了解一下如何從檔案讀取流和向檔案寫入流。這就需要用到 C++ 中另一個标準庫 fstream,它定義了三個新的資料類型:

C++輸入輸出檔案流[通俗易懂]

注:要在 C++ 中進行檔案處理,必須在 C++ 源代碼檔案中包含頭檔案 和 。

打開檔案

在從檔案讀取資訊或者向檔案寫入資訊之前,必須先打開檔案。

ofstream 和 fstream 對象都可以用來打開檔案進行寫操作,如果隻需要打開檔案進行讀操作,則使用 ifstream 對象。 下面是 open() 函數的标準文法,open()函數是 fstream、ifstream 和 of stream 對象的一個成員。

void open(const char *filename, ios::openmode mode);

在這裡,open()成員函數的第一參數指定要打開的檔案的名稱和位置,第二 個參數定義檔案被打開的模式。

C++輸入輸出檔案流[通俗易懂]

我們可以把以上兩種或兩種以上的模式結合使用。例如,如果想要以寫入模 式打開檔案,并希望截斷檔案,以防檔案已存在,那麼可以使用下面的文法:

ofstream outfile;

outfile.open(“file.dat”, ios::out | ios::trunc );

類似地,如果想要打開一個檔案用于讀寫,可以使用下面的文法:

fstream afile;

afile.open(“file.dat”, ios::out | ios::in );

當 C++ 程式終止時,它會自動關閉重新整理所有流,釋放所有配置設定的記憶體,并關 閉所有打開的檔案。但程式員應該養成一個好習慣,在程式終止前關閉所有打開 的檔案。

下面是 close()函數的标準文法,close()函數是 fstream、ifstream 和 ofstream 對象的一個成員。

close();

寫入檔案

在 C++ 程式設計中,我們使用流插入運算符( << )向檔案寫入資訊,就像使用

該運算符輸出資訊到螢幕上一樣。唯一不同的是,在這裡您使用的是ofstream 或 fstream 對象,而不是 cout 對象。

讀取檔案

在 C++ 程式設計中,我們使用流提取運算符( >> )從檔案讀取資訊,就像使用 該運算符從鍵盤輸入資訊一樣。唯一不同的是,在這裡您使用的是 ifstream 或 fstream 對象,而不是 cin 對象。

檔案位置指針

ifstream 和 ofstream 都提供了用于重新定位檔案位置指針的成員函數。

這些成員函數包括關于istream的 seekg(“seek get”)和關于ostream的seekp(“seek put”)。

seekg 和 seekp 的參數通常是一個長整型。第二個參數可以用于指定查找方向。查找方向可以是 ios::beg(預設,從流的開頭開始定位),也可以是 ios::cur(從流的目前位置開始定位),也可以是 ios::end(從流的末尾開始定位)。

檔案位置指針是一個整數值,指定了從檔案的起始位置到指針所在位置的位元組數。

下面是關于定位 “get” 檔案位置指針的執行個體:

// 定位到 fileObject 的第 n 個位元組(假設是 ios::beg) 
fileObject.seekg( n );  
// 把檔案的讀指針從 fileObject 目前位置向後移 n 個位元組 
 fileObject.seekg( n, ios::cur );  
// 把檔案的讀指針從 fileObject 末尾往回移 n 個位元組 
 fileObject.seekg( n, ios::end );  
// 定位到 fileObject 的末尾 
fileObject.seekg( 0, ios::end );            

複制

例題:讀取字母

從鍵盤輸入一行字母,把其中的字母字元依次存放在data1.txt中,然後将文本内容讀入程式,将其中的小寫字母改為大寫字母,再存入磁盤檔案data2.txt中。

代碼如下:

#include "pch.h"
#include<iostream>
#include<fstream>
#include<string> 
using namespace std;


class atoA
{ 
   
public:
	char c;
	atoA(char m)
	{ 
   
		c = m;
	}
	char ZH(char m)
	{ 
   
		c -= 32;
		return c;
	}
};
int main()
{ 
   
	cout << "請輸入一串小寫字母:" ;
	string ss;
	cin >> ss;
	fstream file1;
	file1.open("data1.txt");
	file1 << ss << endl;
	file1.close();

	string s="";//設定空字元串儲存讀取内容
	fstream file2;
	file2.open("data1.txt");
	file2 >> s;//讀取到s中
	file2.close();

	string sn;
	for (int i = 0; i < s.length(); i++)
	{ 
   
		atoA a(s[i]);
		sn += a.ZH(s[i]);
	}
	cout <<"轉化結果為:" <<sn << endl;

	fstream file3;
	file3.open("data2.txt");
	file3 << sn << endl;
	file3.close();
}           

複制

結果如下:

C++輸入輸出檔案流[通俗易懂]

釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/170996.html原文連結:https://javaforall.cn