【C言語】rename()関数でファイル名を変更する方法をわかりやすく解説
rename()関数とは
C言語の rename()関数 は、ファイルやディレクトリの名前を「oldname」から「newname」へ変更するための標準ライブラリ関数です。この操作は実質的に「移動(move)」と同じ動作を行うため、rename()関数を使えばファイルの名前変更だけでなく、ファイルの移動も実現できます。
なお、この関数を使用するには、ヘッダーファイル stdio.h をインクルードする必要があります。
rename()関数の構文
int rename(const char * oldname, const char * newname);
rename()関数の仕様と特徴
2つの引数を受け取ります。1つ目が変更前の名前(oldname)、2つ目が変更後の名前(newname)です。
どちらの引数も定数文字列へのポインタ型であり、ファイルの旧名と新名を指定します。
ファイル名の変更に成功した場合は 0 を返し、失敗した場合は 0以外の整数 を返します。
リネーム操作の際に、newnameと同じ名前のファイルがすでに存在していた場合は、既存のファイルが新しいファイルによって上書き(置き換え)されます。
処理の流れ(アルゴリズム)
rename()関数を使ってファイル名を変更する場合の、基本的な処理の手順は以下の通りです。
ステップ1 − 必要な変数を宣言する
ステップ2 − 変更前のファイルパスを入力する
ステップ3 − 変更後のファイルパスを入力する
ステップ4 − 「rename(old, new) == 0」かどうかを判定する
もし 0 なら → 「ファイル名の変更に成功しました」と表示する それ以外 → 「ファイル名を変更できませんでした」と表示する
サンプルプログラム
以下は、rename()関数を使ってファイル名を変更するC言語のサンプルプログラムです。
#include <stdio.h>
int main(){
char old[100], new[100];
printf("Enter old file path: ");
scanf("%s", old);
printf("Enter new file path: ");
scanf("%s", new);
if (rename(old, new) == 0){
printf("File renamed successfully.\n");
}
else{
printf("Unable to rename files\n");
}
return 0;
}実行結果
上記のプログラムを実行すると、次のような結果が得られます。
実行例1: Enter old file path: test.exe Enter new file path: test1.exe File renamed successfully. 実行例2: Enter old file path: priya.c Enter new file path: bhanu.c Unable to rename files
実行例1では、指定されたファイルが存在しているため名前の変更に成功しています。一方、実行例2では変更元のファイルが存在しないため、rename()関数が0以外の値を返し、「Unable to rename files」と表示されています。このように、戻り値を確認することで処理の成否を判断できるのがポイントです。
-
【C言語】再帰関数を使って2つの整数の最大公約数(GCD)を求める方法
問題 C言語において再帰関数を使用し、与えられた2つの整数の最大公約数(GCD:Greatest Common Divisor)を求めます。 解決策 再帰関数を用いて2つの整数の最大公約数を求めるには、「ユークリッドの互除法」が利用できます。これは「2つの数のGCDは、大きい方の数を小さい方の数で割った余りと、小さい方の数とのGCDに等しい」という性質を応用した手法です。この計算を余りが0になるまで再帰的に繰り返すことで、GCDを効率よく求めることができます。 アルゴリズム 再帰関数を使って2つの整数のGCDを求めるためのアルゴリズムは、以下の手順に従います。 ステップ1 − 再帰関数を
-
Pythonで二分木の葉ノードを新しいルートに変更するプログラムの実装方法
二分木と、その葉(リーフ)に位置する1つのノードが与えられたとしましょう。ここでの課題は、その葉ノードを二分木の新しいルート(根)ノードへと変更することです。この操作は、次の2つのルールに従って行います。 左の子の移動: ノードに左の子が存在する場合、その子は右側へ移動します。 親の移動: ノードの親は、そのノードの左の子になります。この処理の過程で、元の親ノードからそのノードへのリンクは切断(null)されるため、親ノードは子を1つだけ持つ状態になります。 今回扱うツリーのノード構造は以下の通りです。 TreeNode: data: <整数> left: &