このページの解説は C99 をベースとしています。
以下は目次です。
存在しているファイルを削除したいとします。
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) の場合、いずれも失敗と扱われます。
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以外を返します。 真の方が失敗であることに注意してください。
ファイルが存在しない場合や、オープンされている場合は失敗します。
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 を使うようにすれば良いです。
ファイルが存在しない場合や、オープンされている場合は失敗します。
return 0;
を削除(C言語編全体でのコードの統一)「VisualC++」という表現を「VisualStudio」に統一。
新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |