【C言語】fopenで連番ファイルなど変数でファイル名を指定して開く方法

この記事では、C言語でファイル名を変数で指定する方法について学びます。

具体的には、連番ファイルの作成やファイル名に連番を含める方法、ループを使った連番ファイルの作成方法、変数を使ったファイル名の指定や組み立て方、そしてファイル名に変数を組み込む方法について解説します。

目次から探す

ファイル名を変数で指定する方法

プログラミングにおいて、ファイル名を変数で指定する方法は非常に便利です。

変数を使用することで、動的にファイル名を生成することができます。

C言語では、fopen関数を使用してファイルを開く際に、変数を使ってファイル名を指定することができます。

変数を使ったファイル名の指定

変数を使ってファイル名を指定する場合、fopen関数の第1引数に変数を渡すことでファイルを開くことができます。

以下に、変数を使ったファイル名の指定のサンプルコードを示します。


#include <stdio.h>
int main() {
    char filename[20] = "file.txt";
    FILE* file = fopen(filename, "w");
    if (file != NULL) {
        printf("ファイルを開きました。\n");
        fclose(file);
    }
    return 0;
}

上記のコードでは、filenameという変数にファイル名を格納し、fopen関数の第1引数にその変数を渡しています。

変数を使ったファイル名の組み立て方

変数を使ってファイル名を組み立てる場合、文字列を結合する方法が一般的です。

C言語では、strcat関数を使用して文字列を結合することができます。

以下に、変数を使ったファイル名の組み立て方のサンプルコードを示します。


#include <stdio.h>
#include <string.h>
int main() {
    char filename[20] = "file";
    int number = 1;
    char extension[5] = ".txt";
    char filepath[25];
    strcpy(filepath, filename);
    strcat(filepath, "_");
    char num[5];
    sprintf(num, "%d", number);
    strcat(filepath, num);
    strcat(filepath, extension);
    printf("ファイル名: %s\n", filepath);
    return 0;
}

上記のコードでは、strcpy関数strcat関数を使用して、filenamenumberextensionを組み合わせてfilepathを作成しています。

ファイル名に変数を組み込む方法

ファイル名に変数を組み込む場合、文字列の中に変数を埋め込む必要があります。

C言語では、sprintf関数を使用して文字列に変数を埋め込むことができます。

以下に、ファイル名に変数を組み込む方法のサンプルコードを示します。


#include <stdio.h>
int main() {
    char filename[20];
    int number = 1;
    sprintf(filename, "file%d.txt", number);
    printf("ファイル名: %s\n", filename);
    return 0;
}

上記のコードでは、sprintf関数を使用してfilenameにファイル名を組み込んでいます。

%dは整数を表すフォーマット指定子であり、numberの値が埋め込まれます。

連番ファイルの作成

連番ファイルとは、ファイル名に連番を含めたファイルのことです。

例えば、file1.txtfile2.txtfile3.txtのように、ファイル名の末尾に連番を付けていく形式です。

ファイル名に連番を含める方法

連番を含めたファイル名を生成するためには、ファイル名の一部に連番を組み込む必要があります。

C言語では、文字列を結合するためにstrcat関数を使用します。

以下に、連番を含めたファイル名を生成するサンプルコードを示します。


#include <stdio.h>
#include <string.h>
int main() {
    char filename[20] = "file";
    int number = 1;
    char extension[5] = ".txt";
    char filepath[25];
    sprintf(filepath, "%s%d%s", filename, number, extension);
    printf("ファイル名: %s\n", filepath);
    return 0;
}

上記のコードでは、filenameにはファイル名の一部を、numberには連番を、extensionには拡張子を格納しています。

sprintf関数を使用して、これらの変数を組み合わせてfilepathに格納しています。

ループを使った連番ファイルの作成方法

連番ファイルを作成する際には、ループを使用することで簡単に実現することができます。

以下に、ループを使って連番ファイルを作成するサンプルコードを示します。


#include <stdio.h>
#include <string.h>
int main() {
    char filename[20] = "file";
    char extension[5] = ".txt";
    char filepath[25];
    for (int i = 1; i <= 5; i++) {
        sprintf(filepath, "%s%d%s", filename, i, extension);
        FILE* file = fopen(filepath, "w");
        if (file != NULL) {
            printf("ファイル %s を作成しました。\n", filepath);
            fclose(file);
        }
    }
    return 0;
}

上記のコードでは、forループを使用して1から5までの連番ファイルを作成しています。

sprintf関数を使ってファイル名を生成し、fopen関数でファイルを作成しています。

目次から探す