先頭へ戻る

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

Programming Place Plus トップページ -- C言語編 -- 逆引き

先頭へ戻る

この章の概要

この章の概要です。

目的

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

方法①(remove関数を使う)

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

#include <stdio.h>

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

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

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

    return 0;
}

実行結果:

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

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

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

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

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

#include <stdio.h>

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

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

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

    return 0;
}

実行結果:

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

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

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

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

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

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

#include <stdio.h>

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

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

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

    return 0;
}

実行結果:

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

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

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

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

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


参考リンク


------------------------------------------------------------------------

更新履歴

'2018/4/2 「VisualC++」という表現を「VisualStudio」に統一。

'2018/2/15 新規作成。



逆引きのトップページへ

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

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー