ifstream对于不存在的文件返回true

时间:2015-08-22 15:57:17

标签: c++ ubuntu login ifstream

我想做什么?

我正在创建一个c ++程序,我正在检查该文件是否存在,以便在CWD(当前工作目录)中执行命令,如果不是那么bin,如果不存在那么sbin文件夹。

我在做什么?

我正在使用ifstream检查应用程序是否存在。如果创建了对象,我认为它是有效的。否则我不会。这是我所做的代码示例

string pathforCWD = argv[1];

ifstream checkFileCWD(pathforCWD.c_str());
        if (!checkFileCWD) {


    cout << "\nCommand not Found in working directory\n";
        cout<<endl<<"";
        string pathforBin = "/bin/",argv[1];
        ifstream checkFileBin(pathforBin.c_str());
        if(!checkFileBin)
        {
            cout<<"\nCommand also not found in Bin\n";
            string pathforSbin = "/sbin/",argv[1];

            ifstream checkFileSbin(pathforSbin.c_str());
                    if(!checkFileBin)
                    {
                        cout<<"\nFile also not found in sBin\n";
                    }
                    else
                    {
                        cout<<"\nCommand found in SBin directory.. Executing it."<<endl;
                        int response = system((orignalCommand).c_str());
                        programExecution(response);
                    }
        }
        else
        {
            cout<<"\nCommand found in Bin directory.. Executing it."<<endl;
            int response = system((orignalCommand).c_str());
            programExecution(response);
        }

    } else {
        cout<<"\nCommand found in working directory.. Executing it."<<endl;
        int response = system(("./" + orignalCommand).c_str());
        programExecution(response);
    }

我面临的问题是什么?

如果我将无效的程序名称参数传递给存在的程序。未创建当前工作目录ifstram对象,这意味着该文件不存在。但/bin/如何。它说每次都存在该对象。即使它没有。 我做错了什么?

1 个答案:

答案 0 :(得分:3)

以下定义并不符合您的想法:

string pathforBin = "/bin/",argv[1];

提示:您在此处声明两个名称,pathforBinargv