このページの解説は C99 をベースとしています。
以下は目次です。
すでに存在しているファイルの名前を変更したいとします。
C言語の標準ライブラリには、ファイルの名前を変更する rename関数があるので、これを使えば簡単です。
#include <stdio.h>
/*
ファイルの名前を変更する。
old_name: 変更するファイルの名前
new_name: 変更後のファイルの名前
戻り値: 成功したら 0以外、失敗したら 0
*/
int rename_file(const char* old_name, const char* new_name)
{
return !(rename(old_name, new_name));
}
int main(void)
{
if (rename_file("test.txt", "test2.txt")) {
("名前を変更しました。");
puts}
else {
("名前の変更に失敗しました。");
puts}
}
実行結果:
名前を変更しました。
rename関数の第1引数に、変更したいファイルの名前を指定します。 第2引数が変更後の名前です。
rename関数は、名前の変更に成功すると 0 を、失敗すると 0以外を返します。 真の方が失敗であることに注意してください。
変更後の方の名前を持ったファイルがすでに存在していた場合、どういう結果になるかは処理系定義となっています。Windows (Visual Studio) では失敗となります。
確実に失敗としたければ、変更後の名前を持ったファイルの存在を事前に確認して、 存在していたら rename関数の実行自体を避けるようにします。 ファイルの存在を確認する方法は、「逆引き ファイルの存在を確認する」を参照してください。
#include <stdio.h>
#include <sys/stat.h>
/*
ファイルの存在を確認する。
path: ファイルパス。
戻り値: 存在したら 0以外、存在しなければ 0
*/
int exist_file(const char* path)
{
struct stat st;
if (stat(path, &st) != 0) {
return 0;
}
// ファイルかどうか
// S_ISREG(st.st_mode); の方がシンプルだが、Visual Studio では使えない。
return (st.st_mode & S_IFMT) == S_IFREG;
}
/*
ファイルの名前を変更する。
old_name: 変更するファイルの名前
new_name: 変更後のファイルの名前
戻り値: 成功したら 0以外、失敗したら 0
*/
int rename_file(const char* old_name, const char* new_name)
{
// 変更後の名前をもったファイルがすでに存在していたら、失敗とする
if (exist_file(new_name)) {
return 0;
}
return !(rename(old_name, new_name));
}
int main(void)
{
if (rename_file("test.txt", "test2.txt")) {
("名前を変更しました。");
puts}
else {
("名前の変更に失敗しました。");
puts}
}
実行結果:
名前の変更に失敗しました。
return 0;
を削除(C言語編全体でのコードの統一)「VisualC++」という表現を「VisualStudio」に統一。
新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |