PR

【C・C++】ファイルの操作と読み書き【入力・出力】

アイキャッチ C++
この記事は約6分で読めます。

ファイルの操作に関する記事です。
ファイルの読み込みや書き出しの方法を解説しています。

のんびり丸

WEBアプリの開発等をしています。
日々の学習の備忘録として運営していこうと思います。

のんびり丸をフォローする

ファイルの種類

テキストファイル

テキストファイルというのは、人間が読めるファイルのことです。
以下のようなファイルがテキストファイルに該当します。

  • ソースファイル
  • HTML
  • CSS

バイナリファイル

バイナリファイルというのは、人間が読めないファイルのことです。
以下のようなファイルがバイナリファイルに該当します。

  • コンパイル後のファイル
  • 画像データ
  • 音声データ

テキストファイルの処理手順

プログラムでテキストファイルの操作を行う場合、一般的には以下の手順に従ってコーディングを行います。

  1. ファイルポインタの宣言
  2. ファイルを開く
  3. 読み書きを行う
  4. ファイルを閉じる

ファイルポインタの宣言

プログラムでテキストファイルの操作を行うためには、事前にファイルポインタの宣言が必要です。
宣言は次のように行います。

#include <stdio.h> // FILEを使用するために必要
FILE *fp;

ファイルを開く

ファイルを開くには、fopen()を利用します。
読み込みファイルが存在しない、書き込み権限が無いといった理由でファイルの操作に失敗すると、NULLを返します。

fopen("ファイル名", "オープンモード");

#include<stdio.h> // FILEを使用するために必要
FILE *fp = fopen("Test.txt", "r");

オープンモード

オープンモードは、ファイルを開く方法を指定する際に必要です。
使用頻度の高いオープンモードとしては、以下のようなものがあります。

記号意味
"r"読み込み専用
"w"書き込み専用
"a"追加書き込み

ファイルの読み込み

テキストデータを1行分読み込む際は、fgets()を利用します。
改行コードor最大文字数まで読み込みが行われます。

fgets(格納先, 最大文字数, ファイルポインタ);

テキストファイルの終わりを調べるためには、feof()を利用します。
ちなみに、feofは【end of file】の略称です。

feof(ファイルポインタ);

ファイルに書き込み

テキストファイルに文字列を書き込む際は、fputs()やfprintf()を利用します。

fputs(文字列, ファイルポインタ);

fprintf(ファイルポインタ, 書式指定, 文字列);

ファイルを閉じる

ファイルを閉じる際には、fclose()を利用します。

fclose(ファイルポインタ);

テキストファイルを読み込む例

テキストファイル

事前準備として、【Test.txt】というテキストファイルに以下の内容を書き込んでいます。
このテキストファイルを読み込んで、コンソールに表示してみようと思います。

abcde
fghij
klmno
pqrst
uvwxyz

コーディング例①

#include <stdio.h> // FILEを使用するために必要
#pragma warning(disable : 4996) // エラーの回避

FILE* fp;
char a[50];
int i = 1;

int main()
{
	fp = fopen("Test.txt", "r");
	if (fp == NULL)
		return 0;
	while (1) {
		fgets(a, 50, fp);
		if (feof(fp))
			break;
		printf("%s", a);
		i++;
	}
	fclose(fp);

	return 0;
}
出力
abcde
fghij
klmno
pqrst

テキストファイルへ書き込む例

テキストファイル

事前準備として、【Test.txt】というテキストファイルに以下の内容を書き込んでいます。
このテキストファイルに文字列を追記していこうと思います。

abcde
fghij
klmno
pqrst
uvwxyz

コーディング例①

#include <stdio.h> // FILEを使用するために必要
#pragma warning(disable : 4996) // エラーの回避

FILE* fp;
char a[50];
int i = 1;

int main()
{
	fp = fopen("Test.txt", "a");
	if (fp == NULL)
		return 0 ;
	fputs("\nこんにちは\n", fp);
	fprintf(fp, "のんびり丸%s", "です");
	fclose(fp);

	return 0;
}
実行後のテキストファイル
abcde
fghij
klmno
pqrst
uvwxyz
こんにちは
のんびり丸です

バイナリファイルの処理手順

プログラムでバイナリファイルの操作を行う場合、一般的には以下の手順に従ってコーディングを行います。

  1. ファイルポインタの宣言
  2. ファイルを開く
  3. 読み書きを行う
  4. ファイルを閉じる

ファイルポインタの宣言

プログラムでバイナリファイルの操作を行うためには、事前にファイルポインタの宣言が必要です。
宣言は次のように行います。

#include <stdio.h> // FILEを使用するために必要
FILE *fp;

ファイルを開く

ファイルを開くには、fopen()を利用します。
読み込みファイルが存在しない、書き込み権限が無いといった理由でファイルの操作に失敗すると、NULLを返します。

fopen("ファイル名", "オープンモード");

#include<stdio.h> // FILEを使用するために必要
FILE *fp = fopen("Test.dat", "rb");

オープンモード

オープンモードは、ファイルを開く方法を指定する際に必要です。
使用頻度の高いオープンモードとしては、以下のようなものがあります。

テキストファイルの場合と違い、記号の後ろに【b】が付きます。

記号意味
"rb"読み込み専用
"wb"書き込み専用
"ab"追加書き込み

ファイルの読み込み

バイナリデータを読み込む際は、fread()を利用します。

fread(バッファのポインタ, サイズ, 読み込み回数, ファイルポインタ);

ファイルに書き込み

バイナリファイルに文字列を書き込む際は、fwrite()を利用します。

fwrite(バッファのポインタ, サイズ, 読み込み回数, ファイルポインタ);

ファイルを閉じる

ファイルを閉じる際には、fclose()を利用します。

fclose(ファイルポインタ);

ファイルポインタ

C言語やC++では、以下のファイルポインタが標準用意されています。
これらはプログラムの実行開始と同時に自動的に開かれているので、ユーザーが開いたり閉じたりする必要はありません。

  • stdin【スタンダードイン】
  • stdout【スタンダードアウト】
  • stderr【スタンダードエラー】

stdin

stdin【スタンダードイン】は、入力装置(キーボード等)からの入力を受け取る際に使用するファイルポインタです。

stdout

stdout【スタンダードアウト】は、出力装置(コンソール等)に出力する際に使用するファイルポインタです。

stderr

stderr【スタンダードエラー】は、エラー出力装置(コンソール等)に出力する際に使用するファイルポインタです。

タイトルとURLをコピーしました