poco-libraries - 我如何知道 FileInputStream 是否打开了文件?
问题描述
我正在使用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 异常并返回一个布尔值 - 如果成功打开则返回 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;
}
推荐阅读
- html - 循环遍历数组并设置与数组值匹配的任何 html 输入的值
- salesforce - Apex 中的条件逻辑
- sql - 如何在 SAS 中识别具有特定日期的记录?
- azure - 如何将未美化(没有空格)的 JSON 存储到 Cosmos Db 中
- python - BFS使用键遍历python字典
- javascript - 如何使用 JavaScript 查看现有打开的广播频道?
- vuetify.js - Vuetify v-select:检测悬停事件并以编程方式单击
- python - Travis 上的 Python 子流程覆盖
- django-rest-framework - 为两个列表应用搜索过滤器 GenericAPIView
- arrays - 如何在对应于弯曲和旋转矢量的圆形网格阵列中创建旋转凹陷?