如何检查文本文件是否为空或c ++中不存在?

时间:2018-12-08 01:49:25

标签: c++ file text-files ifstream

我写了一个方法,该方法接受文件名,检查文件是否存在并具有内容,然后继续将文件中的6个数字读入6个int变量中并返回true。如果文件不存在或没有内容,则返回false。

但是,当我调用该方法并为其提供一个存在的文件时,它返回false。我不确定哪里出了问题。

这是我的代码:

bool readHSV(string the_file)
{
    if(ifstream(the_file)){
        fstream myfile(the_file, ios_base::in);
        myfile >> h_min >> h_max >> s_min >> s_max >> v_min >> v_max;
        cout << h_min << endl << h_max << endl << s_min << endl << s_max
        << endl << v_min << endl << v_max;
        getchar();
        return true;
    }
    return false;
}

我正在使用的.txt文件的内容:

4
22
68
192
162
247

2 个答案:

答案 0 :(得分:1)

函数返回false的唯一方法是ifstream(the_file)失败,这意味着它根本无法打开文件,无论它是否存在。如果该文件确实存在,但是ifstream仍然失败,请仔细检查the_file包含正确的路径和文件名,以及您的应用有权访问该文件。

请注意,您将两次打开文件,一次通过ifstream,另一次通过fstream。您不需要这样做。您应该只打开一次文件,如果能够从文件中读取所需的值,则返回true,例如:

bool readHSV(const string &the_file)
{
    ifstream inFile(the_file);
    if (inFile >> h_min >> h_max >> s_min >> s_max >> v_min >> v_max)
    {
        cout << h_min << endl
             << h_max << endl
             << s_min << endl
             << s_max << endl
             << v_min << endl
             << v_max;
        getchar();
        return true;
    }
    return false;
}

答案 1 :(得分:0)

您可以像这样使用<filesystem>

#include <filesystem>

namespace fs = std::filesystem; // for brevity

// ...

bool func(std::string const& filename)
{
    if(!fs::exists(filename) || fs::file_size(filename) == 0)
        return false;

    std::ifstream ifs(filename);

    if(!ifs)
        return false;

    // do stuff here with ifs

    return true;
}