fstream my_file( "test.txt")がありますが、test.txtが存在するかどうかわかりません。存在する場合は、私もそれを読むことができるかどうかを知りたい。どうやってするか?ファイルが存在し、C++で読み込み可能かどうかをチェックする方法?
私はLinuxを使用しています。
fstream my_file( "test.txt")がありますが、test.txtが存在するかどうかわかりません。存在する場合は、私もそれを読むことができるかどうかを知りたい。どうやってするか?ファイルが存在し、C++で読み込み可能かどうかをチェックする方法?
私はLinuxを使用しています。
どのオペレーティングシステム/プラットフォームですか?
Linux/Unix/MacOSXでは、fstatを使用できます。
Windowsでは、GetFileAttributesを使用できます。
通常、標準のC/C++ IO関数では、これを実行するポータブルな方法はありません。
Boost.Filesystemを使用することがあります。それはboost::filesystem::exist
機能を持っています。
読み取りアクセス権を確認する方法についてはわかりません。 Boost.Filesystemも見ることができます。しかし、実際にファイルを読み込もうとするよりも、他の(移植可能な)方法はないでしょう。
ファイルシステムは、ウィンドウ上で非常に長いパス(> 256)を処理しますか?私たちは最近、非UnicodeウィンドウAPIが最大256文字を持つという問題に直面しました。 –
私は分かりません。ドキュメント(私の答えのリンクにある)をチェックインするかもしれませんが、あなたがそれを見つけられるかどうかは分かりません。またBoostニュースグループで尋ねるかもしれません。別の方法は、単にそれをチェックすることです。 –
@Richard Corden関数boost :: filesystem :: create_directoriesで非常に長いパスをチェックしました。 ANSIバージョン(char用)は、長いパスに与えられた場合に例外をスローしました(しかし、制限は何とか260に等しいMAX_PATHではなく約250に達しました)。 UNICODE版(wchar_t用)は、ANSIバージョンと同じくらい多くのフォルダを作成してスローせずに正常に返すので、ジョブを実行しなかっただけでなく、エラーを報告しませんでした。私は他の機能とはどういうものか分かりませんが、今も悪い行動をしている可能性があります。 –
最終的にはLinuxを使用しているというポスターを知っていますが、誰もWindows用APIコールPathFileExists()
を言及していないことに驚いています。
Shlwapi.lib
ライブラリとShlwapi.h
ヘッダーファイルを含める必要があります。
#pragma comment(lib, "shlwapi.lib")
#include <shlwapi.h>
関数はBOOL
値を返し、そうのように呼ぶことができる。
if(PathFileExists("C:\\path\\to\\your\\file.ext"))
{
// do something
}
PathFileExists()が信頼できないと主張していました:http://mfctips.com/tag/file-exists/ –
C++ 11は、それが代わりgood()
の暗黙operator boolを使用することが可能なので:
ifstream my_file("test.txt");
if (my_file) {
// read away
}
れます"可能な重複"。私は子供の子供たちがこの質問をしてくれるのだろうか? – SChepurin