Poco :: FileOutputStream просто генерирует исключение Poco :: FileException, если при попытке открыть его возникает ошибка, например, если используется неверный путь к файлу. У него нет какой-либо функции для проверки, является ли она действительной.
Что вы можете сделать, это изменить свою функцию do_copy_file()
, чтобы она перехватывала исключение Poco :: FileException и возвращала логическое значение - true в случае успешного открытия или в противном случае:
bool do_copy_file(Poco::FileInputStream & iss)
{
bool result(true);
try
{
Poco::FileOutputStream fos("output.txt");
Poco::StreamCopier::copyStream(iss, fos);
}
catch (const Poco::FileException&)
{
result = false;
}
return result;
}
Затем вы называете это так:
Poco::FileInputStream fis;
if (do_copy_file(fis)
{
//output file stream opened successfully
}
Если вы хотите, чтобы do_copy_file()
перехватил исключение для открытия входного потока, я бы порекомендовал сделать это в самой функции. Вместо передачи входных потоков передайте пути к файлам:
bool do_copy_file(const std::string &inputFile, const std::string& outputFile)
{
bool result(true);
try
{
Poco::FileInputStream fis(inputFile);
Poco::FileOutputStream fos(outputFile);
Poco::StreamCopier::copyStream(fis, fos);
}
catch (const Poco::FileException&)
{
result = false;
}
return result;
}