標準C/C++でファイルの存在を確認する最良の方法
標準のC/C++には、ファイルの存在を直接確認するための専用関数は用意されていません。そのため、ファイルが存在するかどうかを確認する最も確実な方法は、実際にファイルを読み取りモード(または書き込みモード)で開いてみることです。
ファイルを開く操作に成功すればファイルは存在し、失敗すれば存在しないと判断できます。以下に、C言語とC++それぞれでの実装例を示します。
C言語の場合
C言語では stdio.h の fopen() 関数を使ってファイルを開きます。指定したファイルが存在しない場合、fopen() は NULL を返すため、戻り値を判定することで存在確認が可能です。
サンプルコード
#include <stdio.h>
int main() {
/* ファイルを読み取りモードで開いてみる */
FILE *file;
if ((file = fopen("a.txt", "r")) != NULL) {
fclose(file);
printf("file exists\n");
} else {
printf("file doesn't exist\n");
}
return 0;
}
実行結果
file exists
C++の場合
C++では <fstream> ヘッダーの ifstream クラスを使用します。open() メソッドを呼び出した後、ストリームオブジェクトをそのまま条件式として評価することで、ファイルが正常に開けたかどうかを判定できます。
サンプルコード
#include <fstream>
#include <iostream>
using namespace std;
int main() {
/* ファイルを読み取りモードで開いてみる */
ifstream ifile;
ifile.open("b.txt");
if (ifile) {
cout << "file exists" << endl;
} else {
cout << "file doesn't exist" << endl;
}
return 0;
}
実行結果
file doesn't exist
注意点
この方法では、ファイルが存在しないケースに加えて、アクセス権限がないなどの理由で開けない場合も「存在しない」と同じ扱いになる点に留意してください。より厳密なチェックが必要な場合は、OS固有のAPI(Windowsの GetFileAttributes、POSIX系環境の stat など)の利用を検討するとよいでしょう。ただし、これらは標準規格の範囲外であるため、プログラムの移植性は低下します。
-
【C/C++】基礎力が試される!トリッキーなプログラム10選
ここでは、プログラミングの基礎力を試すことのできる、ちょっと変わった(トリッキーな)プログラムを10個紹介します。面接対策や学習の復習に、ぜひ活用してください。 1. C++で引用符「」を出力するプログラム C++では、出力するテキストの開始と終了を示すために引用符(ダブルクォート)を使用します。そのため、引用符そのものを出力するには、特別なエスケープシーケンスが必要です。C++で引用符を出力するには「\」を使用します。 例 #include<iostream> using namespace std; int main() { cout<<
-
マージソートを使って配列の転倒数(反転数)を数えるC/C++プログラム
転倒数(Inversion Count)とは?与えられた配列をソートする際に発生する反転(転倒)の回数を「転倒数(Inversion Count)」と呼びます。転倒数を求める問題は古典的なアルゴリズム問題の一つで、マージソート(Merge Sort)のアルゴリズムを応用することで効率的に解くことができます。この問題では、各要素について「自分より左側にあり、かつ自分より大きな値を持つ要素」の数をすべて数え上げ、その合計を出力します。この処理は、マージソートのマージ(merge)関数の中で実装されます。理解を深めるために、マージ処理で扱う2つの部分配列を例に考えてみましょう。配列の転倒数の定義配列