66

fstream my_file("test.txt") を取得しましたが、test.txt が存在するかどうかわかりません。もしあれば、私も読めるか知りたいです。どうやってするか?

Linux を使用しています。

4

8 に答える 8

87

私はおそらく一緒に行くでしょう:

ifstream my_file("test.txt");
if (my_file.good())
{
  // read away
}

このgoodメソッドは、ストリームを読み取る準備ができているかどうかを確認します。

于 2009-09-05T15:44:14.677 に答える
22

Boost.Filesystemを使用できます。機能がありboost::filesystem::existます。

読み取りアクセス権を確認する方法がわかりません。Boost.Filesystemも調べることができます。ただし、実際にファイルを読み取ろうとする以外に (移植可能な) 方法はない可能性があります。

編集 (2021-08-26): C++17 が導入され<filesystem>std::filesystem::exists. これにはブーストは不要になりました。

于 2009-09-05T16:04:54.713 に答える
11

UNIX を使用している場合は、access()で読み取り可能かどうかがわかります。ただし、ACL が使用されている場合は、さらに複雑になります。この場合、ifstream でファイルを開いて読み取りを試みるのが最善です。読み取れない場合は、ACL が読み取りを禁止している可能性があります。

于 2009-09-05T15:47:28.453 に答える
10

どのオペレーティング システム/プラットフォームですか?

Linux/Unix/MacOSX では、 fstatを使用できます。

Windows では、GetFileAttributesを使用できます。

通常、標準の C/C++ IO 関数でこれを行う移植可能な方法はありません。

于 2009-09-05T15:43:12.270 に答える
2

投稿者が最終的に 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
}
于 2012-08-14T19:11:09.003 に答える
0

Windowsでのfstatの使用に関して、それがあなたの望むものかどうかはわかりません。Microsoftから、ファイルは既に開いている必要があります。統計はあなたのために働くはずです。

于 2012-06-28T10:23:41.087 に答える