fstream my_file("test.txt") を取得しましたが、test.txt が存在するかどうかわかりません。もしあれば、私も読めるか知りたいです。どうやってするか?
Linux を使用しています。
私はおそらく一緒に行くでしょう:
ifstream my_file("test.txt");
if (my_file.good())
{
// read away
}
このgood
メソッドは、ストリームを読み取る準備ができているかどうかを確認します。
Boost.Filesystemを使用できます。機能がありboost::filesystem::exist
ます。
読み取りアクセス権を確認する方法がわかりません。Boost.Filesystemも調べることができます。ただし、実際にファイルを読み取ろうとする以外に (移植可能な) 方法はない可能性があります。
編集 (2021-08-26): C++17 が導入され<filesystem>
、std::filesystem::exists
. これにはブーストは不要になりました。
UNIX を使用している場合は、access()で読み取り可能かどうかがわかります。ただし、ACL が使用されている場合は、さらに複雑になります。この場合、ifstream でファイルを開いて読み取りを試みるのが最善です。読み取れない場合は、ACL が読み取りを禁止している可能性があります。
どのオペレーティング システム/プラットフォームですか?
Linux/Unix/MacOSX では、 fstatを使用できます。
Windows では、GetFileAttributesを使用できます。
通常、標準の C/C++ IO 関数でこれを行う移植可能な方法はありません。
投稿者が最終的に Linux を使用していると述べたことは知っていPathFileExists()
ますが、Windows の API 呼び出しについて誰も言及していないことにちょっと驚いています。
Shlwapi.lib
ライブラリとShlwapi.h
ヘッダー ファイルを含める必要があります。
#pragma comment(lib, "shlwapi.lib")
#include <shlwapi.h>
関数は値を返し、次のBOOL
ように呼び出すことができます。
if( PathFileExists("C:\\path\\to\\your\\file.ext") )
{
// do something
}