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

时间:2014-10-30 19:33:26

标签: c++ command-line-arguments

我有一个程序,我需要接受一个命令行参数,它是一个文本文件的名称。该程序由./programName file1运行。如果出于我的程序的目的,我可以假设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&gt;&gt; var#将始终有效)。那么在我初次检查else之后是否有可能调用(!myFile.good())语句的情况呢?

1 个答案:

答案 0 :(得分:3)

您应该主要检查输入操作,以了解您的文件是否具有正确的输入格式:

if(myFile >> var1 >> var2) {
    // Everything's fine
}
else {
   // WRONG FORMAT OR COULDN'T BE OPENED!
}

要了解else部分中的实际错误原因,您可以检查iostate函数返回的std::istream::rdstate()标记。

如果open()失败,badbit将被设置,如果其中一个输入操作失败,则failbit将被设置。