ファイル名変更、移動、削除、存在確認

ファイル処理8

ここではファイル処理に関するその他の情報をまとめて解説します。

ファイル名変更

ファイル名を変更するにはrename関数を使用します。

#include <stdio.h>

int main()
{
    const char *file = "C:\\test.txt";
    const char *fileNew = "C:\\test_new.txt";

    if(rename(file, fileNew) == 0)
        printf("%sを%sにリネームしました。\n", file, fileNew);
    else
        printf("%sを%sにリネームできませんでした。\n", file, fileNew);

    getchar();
}
int rename(
 const char *oldname,
 const char *newname
);
ファイルoldnameの名前をnewnameに変更する。
ディレクトリの移動もできる。
戻り値は成功した時に0を返す。
失敗した時に0以外を返す。

これは簡単な関数です。
第一引数に指定したファイルの名前を、第二引数に変更するだけです。
ただし、新しい名前のファイルが既に存在する場合の動作は処理系依存です。

また、rename関数はディレクトリの名前変更も可能です。

#include <stdio.h>

int main()
{
    const char *dir = "C:\\ABC";
    const char *dirNew = "C:\\DEF";

    if(rename(dir, dirNew) == 0)
        printf("%sを%sにリネームしました。\n", dir, dirNew);
    else
        printf("%sを%sにリネームできませんでした。\n", dir, dirNew);

    getchar();
}

ファイル移動

ファイル移動にも同じくrename関数を使用します。

#include <stdio.h>

int main()
{
    const char *file = "C:\\test.txt";
    const char *fileNew = "C:\\new\\test.txt";

    if(rename(file, fileNew) == 0)
        printf("%sを%sに移動しました。\n", file, fileNew);
    else
        printf("%sを%sに移動できませんでした。\n", file, fileNew);

    getchar();
}

新しいファイル名に、別のディレクトリ(フォルダ)を含むパスを指定するだけです。
指定したディレクトリが存在しない場合は移動に失敗します。

ファイル削除

ファイルの削除にはremove関数を使用します。

#include <stdio.h>

int main()
{
    const char *file = "C:\\test.txt";

    if(remove(file) == 0)
        printf("%sを削除しました。\n", file);
    else
        printf("%sを削除できませんでした。\n", file);

    getchar();
}
int remove(
 const char *path
);
ファイルpathを削除する。
戻り値は成功時に0を返す。
失敗すると0以外を返す。

これも単純な関数です。
ただし、ファイルをオープンしている場合はクローズしてから削除してください。

ファイルの存在確認

指定したファイルが存在するかを確認するには、fopen関数(fopen_s関数)で正常に開けるかどうかで判断します。

#include <stdio.h>

int main()
{
    const char *file = "C:\\test.txt";
    FILE *fp;

    //fp = fopen(file, "r");
    fopen_s(&fp, file, "r");

    if(fp == NULL)
        printf("%sは存在しません。\n", file);
    else
        printf("%sは存在します。\n", file);

    fclose(fp);

    getchar();
}

このサンプルコードではファイルの存在をチェックするだけですが、例えばファイルが存在しなければ新しくファイルを作成する、ファイルが存在すれば更新モードで開く、などの処理を分岐するコードが考えられます。

stat関数を使用する方法

ファイルの存在確認にはstat関数も使用できます。
(stat関数に関してはファイルサイズの取得を参照)

#include <stdio.h>
#include <sys/stat.h>

int main()
{
    const char *file = "C:\\test.txt";
    struct stat statBuf;

    if (stat(file, &statBuf) == 0)
        printf("ファイル%sは存在します。\n", file);
    else
        printf("ファイル%sは存在しません。\n。", file);

    getchar();
}

stat関数が成功すればファイルが存在することになります。