ファイルを削除する | Programming Place Plus C言語編 逆引き

トップページC言語編逆引き

このページの概要 🔗

このページの解説は C99 をベースとしています

以下は目次です。

目的 🔗

存在しているファイルを削除したいとします。

方法①(remove関数を使う) 🔗

C言語の標準ライブラリには、ファイルを削除する目的で使用できる remove関数があります。 remove関数は、厳密には「その名前でのファイルへのアクセスを、再びファイルを生成しない限り、不可能にする」という処理を行うことになっていますが、 普通、これはファイルを削除していると考えて良いはずです。

#include <stdio.h>

/*
    ファイルを削除する。

    file_name: 削除するファイルの名前
    戻り値:   成功したら 0以外、失敗したら 0
*/
int delete_file(const char* file_name)
{
    return !(remove(file_name));
}

int main(void)
{
    if (delete_file("test.txt")) {
        puts("ファイルを削除しました。");
    }
    else {
        puts("ファイルの削除に失敗しました。");
    }
}

実行結果:

ファイルを削除しました。

remove関数の引数には、削除したいファイルの名前を指定します。 戻り値は、ファイルの削除に成功すると 0 を、失敗すると 0以外を返します。 真の方が失敗であることに注意してください。

指定した名前を持ったファイルが存在していなかったり、オープンされていたりした場合の結果は処理系定義です。Windows (Visual Studio) の場合、いずれも失敗と扱われます。

方法②(_unlink関数を使う)[非標準] 🔗

C言語の標準ライブラリ関数ではありませんが、_unlink関数でもファイルの削除が行えます。

#include <stdio.h>

/*
    ファイルを削除する。

    file_name: 削除するファイルの名前
    戻り値:   成功したら 0以外、失敗したら 0
*/
int delete_file(const char* file_name)
{
    return !(_unlink(file_name));
}

int main(void)
{
    if (delete_file("test.txt")) {
        puts("ファイルを削除しました。");
    }
    else {
        puts("ファイルの削除に失敗しました。");
    }
}

実行結果:

ファイルを削除しました。

_unlink関数を使用するには、<stdio.h> あるいは <io.h> のインクルードが必要です。

_unlink関数の引数には、削除したいファイルの名前を指定します。 戻り値は、ファイルの削除に成功すると 0 を、失敗すると 0以外を返します。 真の方が失敗であることに注意してください。

ファイルが存在しない場合や、オープンされている場合は失敗します。

方法③(DeleteFile関数を使う)[Windows] 🔗

Windows API の DeleteFile関数(→Microsoft Docs)でも、ファイルの削除が行えます。

#include <stdio.h>

/*
    ファイルを削除する。

    file_name: 削除するファイルの名前
    戻り値:   成功したら 0以外、失敗したら 0
*/
int delete_file(const char* file_name)
{
    return DeleteFileA(file_name);
}

int main(void)
{
    if (delete_file("test.txt")) {
        puts("ファイルを削除しました。");
    }
    else {
        puts("ファイルの削除に失敗しました。");
    }
}

実行結果:

ファイルを削除しました。

DeleteFile関数を使用するには、Windows.h のインクルードが必要です。

DeleteFile関数の引数には、削除したいファイルの名前を指定します。 戻り値は、成功した場合は 0以外、失敗した場合は 0 です。

また、DeleteFile は実際にはマクロになっていて、UNICODEマクロの定義の有無によって、ANSI版(char型)の DeleteFileA と、Unicode版(wchar_t型)の DeleteFileW のいずれかに置換されます。 上のサンプルプログラムでは、文字列を const char* で扱っているため、DeleteFileA の方を直接呼び出すようにしていますが、両対応できるのであれば、DeleteFile を使うようにすれば良いです。

ファイルが存在しない場合や、オープンされている場合は失敗します。


参考リンク 🔗


更新履歴 🔗

 「VisualC++」という表現を「VisualStudio」に統一。

 新規作成。



逆引きのトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る