我想检查一个文件是否存在于两个不同的路径中。如果第一个没有,请检查第二个。
filepath1 = "/path1/file.txt"
filepath2 = "/path2/file.txt"
file_descriptor = open(filepath1)
if ( !file_descriptor.open() )
{
print("file 1 did not work");
//try file 2
file_descriptor = open(filepath2);
if( !file_descriptor.open() )
{
print("could not open file 2. exiting.");
return false;
}
}
//we get here and file_descriptor should point to a valid file
read_file(file_descriptor);
return true;
如何避免嵌套的if
语句?为了可读性,我最好不要嵌套if
语句。这里的问题是,如果第一个语句有效,我不希望它检查第二个if
语句。
我考虑过使用:
goto
(我想避免这种情况(- 布尔值来检查一个是否有效(但现在我引入了额外的变量(
我想这种模式很普遍:你可以尝试任意多的路径:
auto filepath1 = "/path1/file.txt";
auto filepath2 = "/path2/file.txt";
// We assume file_descriptor has been declared earlier
for (const auto fpath: {filepath1, filepath2})
{
file_descriptor = open(fpath)
if (file_descriptor.open())
break;
else
printf("file %s did not workn", fpath);
}
if (!file_descriptor.open()) return false; // or throw
read_file(file_descriptor);
return true;
如果你不在乎打开哪个文件,你可以进行
filepath1 = "/path1/file.txt"
filepath2 = "/path2/file.txt"
if (!(file_descriptor = open(filepath1)).open() &&
!(file_descriptor = open(filepath2)).open())
{
print("could not open file 1 nor 2. exiting.");
return false;
}
...
否则,如果您真的只想要一个if
,则可以进行
filepath1 = "/path1/file.txt"
filepath2 = "/path2/file.txt"
if (!(file_descriptor = open(filepath1)).open() &&
(print("file 1 did not work"),
!(file_descriptor = open(filepath2)).open()))
{
print("could not open file 2. exiting.");
return false;
}
...
但这使得代码不如两个if
s 清晰
附言:不要考虑使用goto