簡體   English   中英

檢查給定的多個文件是否存在

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM