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

C言語のファイル操作入門|オープンモード一覧とファイルコピーのサンプルコード

C言語で行えるファイル操作の一覧

C言語では、ファイルに対して次のような基本的な操作を行うことができます。

  • ファイル名の指定
  • ファイルを開く(オープン)
  • ファイルからデータを読み込む
  • ファイルへデータを書き込む
  • ファイルを閉じる(クローズ)

ファイルを開く基本構文

ファイルポインタの宣言は以下のように行います。

FILE *ファイルポインタ;

例:

FILE *fptr;

続いて、fopen関数を使ってファイルを開き、ファイルポインタに関連付けます。書式は次の通りです。

ファイルポインタ = fopen("ファイル名", "モード");

例:

FILE *fp;
fp = fopen("sample.txt", "w");

ファイルのオープンモード一覧

fopen関数には、用途に応じてさまざまなモードを指定できます。主なモードは以下の表の通りです。

モード説明
r読み込み用としてファイルを開く
w書き込み用としてファイルを開く
a追記(アペンド)用としてファイルを開く
r+読み書き両用としてファイルを開く
w+読み書き両用(先頭から上書き)としてファイルを開く
a+追記・読み込み両用としてファイルを開く
rtテキストファイルを読み込み用として開く
wtテキストファイルを書き込み用として開く
atテキストファイルを追記用として開く
r+tテキストファイルを読み書き両用として開く
w+tテキストファイルを読み書き両用として開く
a+tテキストファイルを追記・読み込み両用として開く
rbバイナリファイルを読み込み用として開く
wbバイナリファイルを書き込み用として開く
abバイナリファイルを追記用として開く
r+bバイナリファイルを読み書き両用として開く
w+bバイナリファイルを読み書き両用として開く
a+bバイナリファイルを追記・読み込み両用として開く

書き込みモード("w")の場合

FILE *fp;
fp = fopen("sample.txt", "w");
  • ファイルが存在しない場合:新しいファイルが自動的に作成されます。
  • ファイルが既に存在する場合:以前の内容はすべて消去され、新しく書き込んだ内容だけが保存されます。

読み込みモード("r")の場合

FILE *fp;
fp = fopen("sample.txt", "r");
  • ファイルが存在しない場合:fopen関数はNULLを返します。
  • ファイルが存在する場合:正常にファイルからデータを読み込めます。

追記モード("a")の場合

FILE *fp;
fp = fopen("sample.txt", "a");
  • ファイルが存在しない場合:新しいファイルが作成されます。
  • ファイルが存在する場合:既存の内容の末尾に新しい内容が追加されます。

モードごとの動作まとめ

モードファイルが存在する場合ファイルが存在しない場合
r読み込みfp = NULL
w既存内容を消去して新規書き込み新規ファイルを作成
a既存内容の末尾に追記新規ファイルを作成

サンプルプログラム:ファイルのコピー

以下は、あるファイルの内容を別のファイルへコピーするC言語のプログラムです。

// あるファイルの内容を別のファイルにコピーするプログラム
#include <stdio.h>
#include <stdlib.h> // exit() のため
int main(){
    FILE *fptr1, *fptr2;
    char filename[100], c;
    printf("読み込み用のファイル名を入力してください\n");
    scanf("%s", filename);
    // 1つ目のファイルを読み込みモードで開く
    fptr1 = fopen(filename, "r");
    if (fptr1 == NULL){
        printf("%s を開けません\n", filename);
        exit(0);
    }
    printf("書き込み用のファイル名を入力してください\n");
    scanf("%s", filename);
    // 別のファイルを書き込みモードで開く
    fptr2 = fopen(filename, "w");
    if (fptr2 == NULL){
        printf("%s を開けません\n", filename);
        exit(0);
    }
    // 元ファイルから1文字ずつ読み取り、書き込み
    c = fgetc(fptr1);
    while (c != EOF){
        fputc(c, fptr2);
        c = fgetc(fptr1);
    }
    printf("\n%s に内容をコピーしました", filename);
    fclose(fptr1);
    fclose(fptr2);
    return 0;
}

実行結果

このプログラムを実行すると、次のような出力が得られます。

読み込み用のファイル名を入力してください
file2.txt
書き込み用のファイル名を入力してください
file1.txt

file1.txt に内容をコピーしました
  1. C言語のシフト演算とは?左シフト・右シフト・補数の基本をわかりやすく解説

    問題 C言語を使用して、ある数値に対する左シフト・右シフト・補数(ビット反転)を求める簡単なプログラムを作成するには、どのようにすればよいのでしょうか。 解決方法 左シフト(<<) 変数の値を1ビットだけ左へシフトすると、その値は2倍になります。「a × 2」を計算したのと同じ結果です。 例:a = 10 の場合、a << 1 = 20 右シフト(>>) 変数の値を1ビットだけ右へシフトすると、その値は元の半分になります。「a ÷ 2」の整数除算と同じ結果です。 例:a = 10 の場合、a >> 1 = 5 サンプルプログラム 以下は、シ

  2. C言語の探索アルゴリズム解説|線形探索と二分探索の違いと実装例

    探索(サーチ)とは、複数の要素で構成されるリストの中から、目的の「キー」となる要素を見つけ出す処理のことです。 リストの中に指定した要素が存在すれば、その探索は「成功」とみなされます。 指定した要素がリストに存在しなければ、その探索は「失敗(不成功)」となります。 C言語で広く使われている代表的な探索手法は、主に次の2つです。 線形探索(Linear Search/リニアサーチ) 二分探索(Binary Search/バイナリサーチ) 線形探索(Linear Search)とは 線形探索は、リストの先頭から順に要素を1つずつ取り出し、キーと一致するかどうかを確認していく、最も基本的な探