C++ プロセスのウォークスルー: 入力ストリームと出力ストリーム

フロー

流れの意味

フローは抽象的な概念であり、データを送信するためのキャリアとしての乱流として理解できます。キーボードから入力したばかりのデータ、メモリ内のデータ、ディスク ファイル内のデータなど、データを保存できる場所はごくわずかです。これらのデータが相互に流れることで、フローの概念が成り立ちます。なる。これで、彼がデータを送信するためのキャリアであることを理解する必要があります.

I/O ストリーム

入力および出力ストリームには、cin.getline() cin.get() などの多くの関数が含まれています    
。cout、cin とだけ言ってください。

CとC++の違い

    1. 入門コースとしては、c 言語が第一の選択肢です. c を学んだ人なら誰でも、c の出力と入力が printf と scanf であることを知っています. 最大の利点は精度です. 十分に注意している限り、あなたの c 言語コードは最高の言語と見なすことができます。
    2. しかし、誰もがそれほど注意を払っているわけではありません. これらの人々にとって, 精度は不利になります. %d を使用して超精度または文字列の数値を出力すると、コンパイルシステムはそれが正しいと見なします (コンパイルシステムをセットアップできない理由、認識できますか? これは合成の原理の話なので、最後に話しましょう (ここでは説明しません) 実行するとエラーが発生し、非常に面倒です。
    3. C++ は一方では c の入力と出力を保持し、他方では独自の入力と出力 cin と cout を持っています. この種の入力と出力ストリームは使用するのにはるかに便利です. cin の後に入力変数名を書きます. >> または cout<< の後に出力変数名を記述します

C++ I/O の利点

これには多くの利点があり、エラー報告なしで間違った入力と出力が発生しないため、タイプ セーフです。C++ はオブジェクト指向であるため、入力および出力ストリームはオブジェクトを出力でき、オブジェクト指向は利点です。他の章でわかるように、c++ はシンボルをオーバーロードできます。もちろん、>> と << もオーバーロードできるため、いつでも関数を変更でき、スケーラビリティーが利点です実際、これらの利点は C++ の利点でもあります。

私流

Java の io ストリーム ライブラリは非常に大きい. 同様に C++ のストリーム ライブラリも非常に強力です. ストリーム ライブラリを紹介しましょう.

IO ストリーム ライブラリ

ここに画像の説明を挿入
iostream 入力および出力ストリーム基本クラス
istream 出力ストリーム基本クラス
ostream 出力ストリーム基本クラス

fstream 入力および出力ファイル ストリーム クラス
ifstream 入力ファイル ストリーム クラス
ofstream 出力ファイル ストリーム クラス

ファイルの入出力ストリーム

ファイル ストリーム。主な操作はディスク内のファイルです。以上のように、多くのヘッダーファイルが利用可能で、一般的にはヘッダーファイルにこれを使用するだけでほぼ十分です。

#include<fstream>

ファイルを開く方法
ios::in 入力としてファイルを開く
ios::out 出力としてファイルを開く、ファイルが既に存在する場合は、ファイルをクリアする
ios::app 出力としてファイルを開き、
ios::ate at を追加する開くファイルの最後 既存のファイル。ファイル ポインタはファイルの最後を指します
ios::trunc  
ios::binary ファイルをバイナリ モードで開きます
ios::in|ios::out ファイルを入出力モードで開きます。ファイルは読み書き可能
ios::out| ios::binary 出力ファイルをバイナリモードで開く
ios::in|ios::binary 入力ファイルをバイナリモードで開く

文字ストリーム

    これはC++では特にわかりませんが、Javaでは非常に分かりやすく、Javaを学んでいるので自分でも覚えやすいです。
    文字ストリームファイルとは、内容がUnicodeでエンコードされたファイルのことで、簡単に言うと、メモ帳で開いて認識できれば文字ストリームファイルです。ディスクの保存方法は確かに基本単位としてバイトに基づいているため、文字ストリーム ファイルの保存は、ファイルをディスクに保存する前にファイルをバイトに変換することです。文字ストリームファイルを処理する場合、必ず途中で Unicode 変換処理があり、速度が遅くなります。
    この種のファイルを読み書きするには、ofstream outfile("file name", open mode) を使用します。通常、open モードがバイナリでなくても問題ありません。

#include<fstream>
using namespace std;
int main(){
    
    
//文件内容输入
	ostream outfile("我是文件.txt",ios::out);
	outfile<<"这是我要存入文件的内容";
//文件内容输出
	ifstream infile("又是文件.txt",ios::in);
	//文件有很多字?那用个数组和循环吧
	char a[100];
	for(int i=0;i<100;i++){
    
    
		infile>>a[i];
	}
	return 0;
}

多くの人は、out が実際にはインプットであり、in が実際にはアウトプットであり、これを覚えることは難しい. 文字ストリームファイルの入出力に遭遇した場合、本体をメモリとみなし、out はメモリからデータを出力してファイルに到達し、in はファイルからメモリにデータを入力することです。面倒なので無視してください)

バイトストリーム

バイト ストリーム ファイルは、メモリからディスク ファイルに直接転送されるため、速度が速くなります。もちろん、バイナリを開く方法は Ios::binary を使用する必要があります。ファイルを読み書きするには、 write メソッドと read メソッドを使用する必要があります

#include<fstream>
using namespace std;
int main(){
    
    
	ofstream outfile("又是我.dat",ios::binary);
	outfile.write("你好你好,我又要进去了",10);//后面那个是前面字符串的长度
	
	char *a;
	istream infile("又是我.dat",ios::binary);
	infile.read(a,sizeof(a));

	return 0;
}

ファイル クラス ポインタが開かれて使い果たされており、最後に close() で閉じる必要があります

上記のクラスを使用するプログラムを作成します


/*************************************************************************
        > File Name: filefunction.cpp
        > Author:wangzhiyu12
        > Mail:
        > Created Time: 2020年07月04日 星期六 17时12分37秒
 ************************************************************************/

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

//字符流 文件输入
void character_file_out(char filename[]){
    
    
    ofstream outfile(filename,ios_base::out|ios_base::in);
    if(!outfile){
    
    
        cerr<<"open error"<<endl;   //标准错误信息输出关键字cerr
        exit(1);                    //若出错,退出
    }
    char ch;
    while((ch=cin.get())!=EOF){
    
    
       // cout<<ch;
        outfile<<ch<<" ";
    }
}

//字符流文件 读出,显示控制台
void character_file_input(char filename[]){
    
    
    ifstream infile(filename,ios_base::in|ios_base::out);
    if(!infile){
    
    
        cerr<<"open error!"<<endl;
        exit(1);
    }
    char ch;
    while(infile.get(ch)){
    
          //一个字符一个字符的获取文件内容,并且赋给ch
        cout.put(ch);           //输出ch
    }
}

void byte_file_out(char filename[]){
    
    
    fstream outfile(filename,ios_base::binary);
    if(!outfile){
    
    
        cerr<<"open error";
        exit(1);
    }
    char *ch;
        while((ch=cin.get())!=EOF){
    
    
        outfile<<ch<<" ";
    }
}

//字符流文件 读出,显示控制台
void character_file_input(char filename[]){
    
    
    ifstream infile(filename,ios_base::in|ios_base::out);
    if(!infile){
    
    
        cerr<<"open error!"<<endl;
        exit(1);
    }
    char ch;
    while(infile.get(ch)){
    
          //一个字符一个字符的获取文件内容,并且赋给ch
        cout.put(ch);           //输出ch
    }
}

void byte_file_out(char filename[]){
    
    
    fstream outfile(filename,ios_base::binary);
    if(!outfile){
    
    
        cerr<<"open error";
        exit(1);
    }
    char *ch;
    cin.getline(ch,10,'\n'); //获取一行
    outfile.write(ch,sizeof(ch));
}

void byte_file_input(char filename[]){
    
    
    fstream infile(filename,ios_base::binary);
    if(!infile){
    
    
        cerr<<"open error"<<endl;
        exit(1);
    }
    char *ch;
    infile.read(ch,sizeof(ch));
    cout<<ch;
}

int main(){
    
    
	//调用函数

    return 0;
}

上記のプログラムは Linux の vim で書かれており、ios_base は ios に変更できます。

おすすめ

転載: blog.csdn.net/wangzhiyu12/article/details/107117163
おすすめ