我如何知道 FileInputStream 是否打开了一个文件?
How do I know whether FileInputStream opens a file?
我正在使用Poco::FileInputStream设计一个复制函数
void do_copy_file(Poco::FileInputStream & iss)
{
Poco::FileOutputStream fos("output.txt");
Poco::StreamCopier::copyStream(iss, fos);
}
然后,用户可以这样调用do_copy_file
Poco::FileInputStream fis;
do_copy_file(fis);
我的问题:我可以判断iss引用的文件是否有效吗?
Poco::FileOutputStream 如果在尝试打开它时发生错误,则抛出 Poco::FileException,例如如果使用了无效的文件路径。它没有任何功能来测试它是否有效。
您可以做的是更改 do_copy_file()
函数以捕获 Poco::FileException 异常和 return 布尔值 - 如果成功打开则为 true,否则为 false:
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;
}
我正在使用Poco::FileInputStream设计一个复制函数
void do_copy_file(Poco::FileInputStream & iss)
{
Poco::FileOutputStream fos("output.txt");
Poco::StreamCopier::copyStream(iss, fos);
}
然后,用户可以这样调用do_copy_file
Poco::FileInputStream fis;
do_copy_file(fis);
我的问题:我可以判断iss引用的文件是否有效吗?
Poco::FileOutputStream 如果在尝试打开它时发生错误,则抛出 Poco::FileException,例如如果使用了无效的文件路径。它没有任何功能来测试它是否有效。
您可以做的是更改 do_copy_file()
函数以捕获 Poco::FileException 异常和 return 布尔值 - 如果成功打开则为 true,否则为 false:
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;
}