假设文件将被打开,我是否相当安全

Am I reasonably safe in assuming file will open?

本文关键字:是否 安全 文件 假设      更新时间:2023-10-16

我有一个程序,需要接收一个文本文件名的命令行参数。该程序由运行/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