ファイルI/O

10489 ワード

1.ファイルI/O

  • 低レベルファイルI/O
    ファイルインジケータ:INT FD
    特徴:より速く、バイト単位のI/O
    主な機能:oepn、close、read、write、lseek
  • 高標準ファイルI/O
    ファイルインジケータ:FILE*fp
    特性:使いやすく、バッファ単位のI/O
    主な関数:fopen、fclose、fread、fwrite、fseek
  • 2. Opening files : Low-level IO


  • 既存のファイルを開く(open)
    -初期位置は、ファイルの初期指定、解読(読み取り)、書き込み(書き込み)の準備

  • 新しいファイルの作成(create)
    -ファイルを作成した後にファイルを使用する準備をします.これはファイルを開くのと同じです.
  • 生成されたファイルは、最初は内容がなく、記録演算のみが意味する
  • である.

  • fd= open(filename,flags[, pmode])

  • 3. Closing Files : Low-Level IO

  • ファイルを閉じる(閉じる)
    -ファイルを閉じると、論理ファイル名を他のファイルに使用できます.
  • close(fd)
  • 4. Read/Writing : Low-level IO



    5. Opening & Closing Files : High-level IO

  • Cストリーム(stdio.h)
    - file = fopen(filename,type)
    ex) File fp = fopen("a.txt","w")
  • w-> write
  • r-> read
  • a -> append
  • 6. Reading/Writing : High level IO



    7. Reading/Writing : C++ Stream

  • C++ stream ( fstream.h )
    -C++でオーバーロード(>>入力、<<出力)
    - ostream&operator << (char c);
  • int n = 5;
    cout << "value of n is" << n << endl;
    
    ex 2)C++stream(fstream.h)例
    #include <fstream.h>
    fstream afile;
    afile.open(file_name,mode)
    afile << "201819149" << "Dong-woong" << "KIM";
    afile >> ch;
    

    C++ファイルI/Oの基本知識


    1.ファイルからifstreamを読み込む


    ifstreamを解放するとinput file streamになります.
    「プログラム内のファイルのいずれかをストリームバッファに持ち込み、プログラムを入力します」
    つまり、ファイルから何かを取得し、プログラムに入力するのに役立つクラスです.
    ifstream = file->program
    ifstream関数のプロトタイプとメンバー変数
    タイトルファイル:fstream

  • ファイルを開くときに使用するopen関数
    関数のプロトタイプ:
    void open(const char* fileName, ios_base::openmode=ios_base::in);
    void open(const string& fileName, ios_base::openmode=ios_base::in);
    関数の説明:
    最初のパラメータとして開くファイル名
    2番目のパラメータで開くモード
    ios base::ファイルを読み込むために開きます.
    ios base::out-ファイルに書き込むために開きます.
    ios base::binary-ファイルがバイナリ形式で開きます.
    さらにios base::ate、app、truncモードもあります.
    通常、ifstreamのデフォルトはin、ofstreamのデフォルトはoutなので、単独で入れる必要はありません.
    出典:https://blockdmask.tistory.com/322[開発者志望生]

  • 開いているis open関数の確認
    関数プロトタイプ:bools open()const;
    関数の説明:ファイルが開いていることを確認します

  • ファイルのclose関数を閉じる
    関数プロトタイプ:void close()
    関数の説明:ファイルへの接続を閉じる関数

  • ファイルからcharごとにプログラムに読み込まれる関数
    関数プロトタイプ:istream&get(char&c);
    関数説明:読み出したファイルから文字単位で読み出し、パラメータとしてcに入れる関数.
    使用方法:
  • char c;
    while(readFile.get(c))
    {
    //읽은 char가 c에 들어가 있다.
    cout << c;
    }

  • ファイルからプログラムに行単位で取得される関数
    関数プロトタイプ:istream&getline(char*str,streamsize len);
    関数の説明:行単位で文字列を読み出しstrに保存する関数です.
    1行の条件は、「n」文字列の最後の書き換え文字が現れるまで、またはファイルの最後のEOFに遭遇するまでです.
  • 出典:https://blockdmask.tistory.com/322[開発者志望生]
  • ファイルの末尾は何ですか?
    関数プロトタイプ:bool eof()const;
    関数の説明:ファイルの最後にtrueを返します.そうしないとfalse
  • を返します.
    ex)
    std::ifstream readFile; // 읽을 목적의 파일선언
    
    readFile.open("words.txt"); // 파일열기
    if(readFile.is_open()) // 파일이 열려있다면
    {
        while(readFile.eof()) // 파일 끝까지 읽어서
        {
        char arr[256];
        readFromFile.getline(arr,256); // 한줄씩 읽어오기
        
        }
    }    
    
    readFile.close();

    2.ファイルofstreamへの書き込み


    ofstreamを解放するとoutput file streamになります.
    出力=出力
    つまり、プログラムをファイルに出力するのに役立ちます.
    ofstream = program->file
  • ファイルを開くときに使用するopen関数
  • 関数プロトタイプ:void open(const char*fileName,ios base::openmode=ios base::out);
    関数プロトタイプ:void open(const string&fileName,ios base::openmode=ios base::out);
    関数の説明:最初のパラメータはファイル名です.
    上のファイル読み込みでは、2番目のパラメータはinですが、ファイルへの書き込みはoutで、パラメータdefaultが設定されていることがわかります.
    使用方法は、ファイル読み込みifstreamで使用する方法と同じです.
    2番目のパラメータは、ファイルからファイルを取得するか書き込むかによって異なります.
    is open関数ファイルが開いているかどうかを確認
    関数プロトタイプ:bools open()const;
    関数の説明:ファイルが開いているかどうかを確認するための関数です.
  • しっぽが長いですねドアを閉めましょう.close関数
  • 関数プロトタイプ:void close()
    関数の説明:ファイルに接続されている関数を閉じます.
  • の書類に書いておきましょうか?write関数
  • 関数プロトタイプ:ostream&write(const char*str,streamsize n);
    関数の説明:writeファイルの長さを、最初のパラメータで受信したロールポインタタイプ文字列のnの長さと同じにします.
    ファイルへの書き込みの簡単な例
    using namespace std;
    
    ofstream writeFile;            //쓸 목적의 파일 선언
    writeFile.open("words.txt");    //파일 열기
    
    char arr[11] = "BlockDMask";        //파일에 쓸 문자열
    
    if(writeFile.is_open())    //파일이 열렸는지 확인
    
    {
    
    writeFile.write(arr, 10);    //파일에 문자열 쓰기
    
    }
    
    writeFile.close();    //파일 닫기
    **非常に重要です.c言語配列として表される文字列は、文字列の末尾に「0」を含むため、配列の「全長-1」をwriteの2番目のパラメータとして使用する必要があります.
    したがって、「BlockDMask0」の文字[]配列長は11ですが、実際には10文字なので、ファイルに正常に書き込むには10を入れなければなりません.
    C++stringタイプの文字列を使用すると、心配する必要がないので便利です.次の例でstringの例を見てください.
    これらifstreamとofstreamクラスの組み合わせをファイルI/Oクラスと呼ぶ.
    前述したように、タイトルファイルはファイルストリームです.
    出典:https://blockdmask.tistory.com/322[開発者志望生]