![](/img/trans.png)
[英]How to check if a "KEY" exist in a map for given a given "VALUE" in C++
[英]Check if a given multiple file exist
我是C ++的新手。 卡在現有代碼庫的一部分中,我需要在其中確定兩個文件是否存在。 如果其中任何一個或兩個都存在,則需要設置一個標志。
該代碼段如下所示:
bool Flag = false;
string string_one, string_two;
string_one = "/blah/blah/bhah1.ext";
string_two = "/blah/blah/bhah2.ext";
std::ifstream fs1( string_one.c_str() );
if ( (bool)fs1 == false )
Flag = true;
std::ifstream fs2( string_two.c_str() );
if ( (bool)fs2 == false )
Flag = true;
現在,問題是:
如果string_one
是現有文件,則第一個if
可以正常工作,並且Flag的值string_one
(仍然為false
)。 但是,如果還存在string_two
某種方式將Flag
的值設置為true
。 跑了調試器,發現if ( (bool)fs2 == false )
,控制權就進入了內部。
是因為兩次使用了std::ifstream
嗎?
我也許會問一個愚蠢的問題。 提前致謝!
從您的帖子中,您說如果要存在一個(或兩個)文件,則要設置標記。 當前代碼將設置標記(如果它們不存在)(無法將其打開以進行讀取)。 嘗試這樣的事情:
bool flag = false;
std::string string_one = "/blah/blah/bhah1.ext";
std::string string_two = "/blah/blah/bhah2.ext";
std::ifstream fs1(string_one.c_str());
std::ifstream fs2(string_two.c_str());
if (fs1 || fs2) {
flag = true;
}
如果任何一個已成功打開以進行讀取,則將flag
設置為true
。 如果要設置一個不存在的標志,只需在if
語句中取反表達式即可。 您還可以執行以下操作(如上所述,在對問題的評論中提到):
flag = !fs1 || !fs2;
如果您的編譯器與C ++ 17兼容,則應使用<filesystem>
庫。
bool Flag = false;
string string_one = "/blah/blah/bhah1.ext";
string string_two = "/blah/blah/bhah2.ext";
//MSVC
namespace fs = std::experimental::filesystem;
//GCC or any other compiler which has moved filesystem out of the experimental namespace
//namespace fs = std::filesystem;
Flag = fs::exists(string_one) || fs::exists(string_two);
此代碼不需要您實際打開文件,出於性能方面的考慮,這可能會很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.