大家好,又見面了,我是你們的朋友全棧君。
文章目錄 - 一、C++輸入輸出
- 二、檔案流
- 例題:讀取字母
一、C++輸入輸出
I/O 庫頭檔案
下列的頭檔案在 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++ 源代碼檔案中包含頭檔案 和 。
打開檔案
在從檔案讀取資訊或者向檔案寫入資訊之前,必須先打開檔案。
ofstream 和 fstream 對象都可以用來打開檔案進行寫操作,如果隻需要打開檔案進行讀操作,則使用 ifstream 對象。 下面是 open() 函數的标準文法,open()函數是 fstream、ifstream 和 of stream 對象的一個成員。
void open(const char *filename, ios::openmode mode);
在這裡,open()成員函數的第一參數指定要打開的檔案的名稱和位置,第二 個參數定義檔案被打開的模式。
我們可以把以上兩種或兩種以上的模式結合使用。例如,如果想要以寫入模 式打開檔案,并希望截斷檔案,以防檔案已存在,那麼可以使用下面的文法:
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();
}
複制
結果如下:
釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/170996.html原文連結:https://javaforall.cn