假设文件将被打开,我是否相当安全
Am I reasonably safe in assuming file will open?
我有一个程序,需要接收一个文本文件名的命令行参数。该程序由运行/programName文件1。如果为了我的程序的目的,我可以假设file1总是正确格式化的,我可以只做吗
ifstream myFile(argv[1]);
if(!myFile.good()){
cout << "Not a valid player file" << endl;
return 1;
}
检查是否有这样的文件,然后简单地
myFile >> var1;
myFile >> var2;
myFile.close();
还是我应该坚持
if(myFile.is_open()){
myFile >> var1;
myFile >> var2;
myFile.close();
}
else{
cout << "Unable to open file";
}
同样,我可以假设文件的格式总是正确的(即myFile>>var#总是有效的)。那么,在我对(!myFile.good())
进行初始检查后,是否存在可能调用else
语句的情况?
您应该主要检查输入操作,以了解您的文件是否具有正确的输入格式:
if(myFile >> var1 >> var2) {
// Everything's fine
}
else {
// WRONG FORMAT OR COULDN'T BE OPENED!
}
要了解else
部分中的实际错误原因,可以检查std::istream::rdstate()
函数返回的iostate
标志。
如果open()
失败,则将设置badbit
,如果其中一个输入操作失败,则设置failbit
。
相关文章:
- 通过网络、跨平台传递std::变体是否安全
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 跨 DLL 边界访问虚拟方法是否安全/可能?
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 在函数结束后使用指向变量的指针是否安全?
- 逐字节删除 void* 是否安全?
- 在 RAII 构造中修改 RVO 值是否安全?
- 线程调用的函数对对象删除是否安全?
- 将对象的字节复制到数组并再次复制回来是否安全
- 使用枚举为数组编制索引是否安全?
- 返回从字符串文本创建的静态string_view是否安全?
- 在cstlib中将#include_next替换为#include是否安全
- 由并发无序映射查找线程调用的函数是否安全?
- 使用 c++ 原子时编写"y=++x"是否安全?
- 从另一个线程发出信号是否安全?
- 从其存储的回调中删除 std::函数是否安全
- 使用 std::vector::swap 方法在C++中交换两个不同的向量是否安全?
- 当我在C++中调用 struce 的只读静态成员时,线程是否安全
- 同时调用 ASIO 对象的 API 是否安全?
- 使用自己的迭代器分配容器是否安全?