C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のファイルオープンモード徹底解説:「r」と「r+」の違いとは?

プログラミングにおいて、ファイル操作はメモリとのやり取りを通じてファイルへアクセスし、データを取得・保存するために非常に重要な機能です。

プログラムを使えば、ファイルからデータを読み取るだけでなく、ファイルへのデータの書き込みなど、さまざまな処理を実行できます。

この記事では、その中でも「ファイルからのデータ読み込み」に焦点を当てて解説します。

ファイル操作の基本:オープンモードとは

プログラミングでは、何らかの操作を行う前に必ず対象のファイルを「開く(オープンする)」必要があります。そして、ファイルを開く際には複数の「モード」が用意されており、どのモードで開いたかによって、そのファイルに対して実行できる操作が決まります

ここでは、ファイルを読み込むための代表的な2つのモード、「r」と「r+」の違いについて学んでいきましょう。どちらもプログラム内でファイルを読み取るために使われますが、できる操作の範囲に重要な違いがあります。

ファイルを開くための基本構文

FILE *fp;
fp = fopen("filename.fileextension", "mode");

fopen関数の第1引数にはファイル名(拡張子を含む)、第2引数にはオープンモードを文字列で指定します。戻り値としてファイルポインタが返されるので、以降の読み書き処理はこのポインタを通じて行います。

「r」モード:読み取り専用で開く

「r」モードは、ファイルを読み取り専用で開きます。ファイルポインタはファイルの先頭に配置され、既存の内容を読むことだけが可能です。もし指定したファイルが存在しない場合、fopen関数はNULLを返します。そのため、実際のプログラムではNULLチェックを行ってエラー処理を入れるのが安全です。

「r」モードでファイルを開くサンプルプログラム:

#include <stdio.h>
#include <iostream>
using namespace std;

int main() {
    FILE* readFile;
    char ch;
    readFile = fopen("file.txt", "r");
    while (1) {
        ch = fgetc(readFile);
        if (ch == EOF)
            break;
        cout<<ch;
    }
    fclose(readFile);
}

出力 −

Tutorials Point

このプログラムでは、fgetc関数を使って1文字ずつファイルの終端(EOF)まで読み込み、標準出力に表示しています。

「r+」モード:読み取りと書き込みの両方に対応

「r+」モードは「r」モードとよく似ていますが、読み取りと書き込みの両方が可能という点が大きく異なります。こちらもファイルポインタは先頭に配置されるため、既存の内容を読みながら、任意の位置に上書きで書き込むことができます。

ただし注意点があります。「r+」モードで指定したファイルが存在しない場合も、やはりNULLが返され、新しいファイルは自動的には作成されません。新規ファイルを作成しつつ読み書きを行いたい場合は、「w+」モードを使用します。

「r+」モードでファイルを開くサンプルプログラム:

#include <stdio.h>
#include <iostream>
using namespace std;

int main() {
    FILE* readFile;
    char ch;
    readFile = fopen("file.txt", "r+");
    while (1) {
        ch = fgetc(readFile);
        if (ch == EOF)
            break;
        cout<<ch;
    }
    fclose(readFile);
}

出力 −

Tutorials Point

「r」と「r+」の違いまとめ

項目r モードr+ モード
主な用途読み取り専用読み取り+書き込み
ファイルが存在しない場合NULLを返すNULLを返す(新規作成はされない)
既存ファイルの内容保持される保持される(上書き位置は自由)
新規ファイル作成が必要な場合不可不可(w+モードを使用)

このように、「r」と「r+」はどちらも既存ファイルを読み込むためのモードですが、書き込みの可否が最大の違いです。用途に応じて適切なモードを選択することで、安全かつ効率的なファイル操作が可能になります。

  1. Linuxのファイルグロブとは?ワイルドカードによるパス名展開を徹底解説

    ファイルグロブ(パス名展開)とは ファイルグロブ(File Globbing)は「パス名展開(Path Name Expansion)」とも呼ばれる仕組みで、Linuxにおいてワイルドカードのパターンを認識し、そのパターンに基づいてファイルパスを展開することで、条件に合致するファイルを見つける方法です。 ワイルドカードパターンとは ワイルドカードパターンとは、パターンをもとに複数のファイルを選択するために用いられる特殊な文字列のことです。「*」「?」「[]」といった文字を使用することで、柔軟なパターンマッチングやファイルの一括選択が可能になります。 アスタリスク(*):0文字以上の任意の文

  2. Excelがファイルを開くときに0%で固まる問題の原因と解決策まとめ

    Microsoft ExcelはOfficeスイートに含まれる最も便利なツールのひとつです。データの整理や表の管理など、ビジネスシーンで幅広く活用されています。しかし、どんなに安定したアプリでも、ブック(ワークブック)の読み込みに異常に時間がかかることがあります。「ファイルを開こうとしたのに、進行状況が0%のまま固まってしまう」という経験はありませんか?本記事では、この「Excelが0%で開かない」問題の原因と、具体的な解決方法をわかりやすく解説します。 ブック内のデータ量が多い場合、ファイルの読み込みにある程度時間がかかるのは正常な動作です。しかし、15分以上経っても0%のまま変化がない場合