循环加载多个文件 (C++)

Loop for load multiples files (C++)

我正在尝试加载文件夹中名称格式为“file_i.csv”的所有文件。

为此我编写了程序:

void load_reel_set()
{
    bool file_exists = true;
    unsigned n_files = 0;
    
    vector<unsigned> my_vector;
    string line;
    int i;

    ifstream file("..\file_" + to_string(n_files) + ".csv");
    file_exists = file.good();

    
    while (file_exists) {

        //Load reel strips from file:
        my_vector.clear();

        getline(file, line, '\n');
        save_line(my_vector, line);

        all_my_vectors.push_back(my_vector);
        file.close();

        n_files++;
        ifstream file("..\file_" + to_string(n_files) + ".csv");
        file_exists = file.good();
    }
}

函数“save_line”逐个将字符转换为无符号并将其保存在向量中。

我文件夹里有四个文件,每个文件只有一行。此功能可识别我的所有文件,但在第一个文件之后,文件行为空。 “all_my_vectors”向量在第一个循环中具有预期值,但在接下来的循环中为 0。

您有两个 独立 实例 ifstream file,循环内的一个隐藏了循环外的一个。当关闭循环后内部文件超出范围时,外部文件仍保留在第一个文件的末尾。

试试看:

file.open("the new path");

旁注:这个 file_exists 变量完全过时了,你可以直接检查 while(file.good()).

您实际上可以通过以下方式避免一些重复代码:

// other variables...

for(unsigned int n_files = 0;; ++n_files)
{
    std::ifstream file("path to next file");
    if(!file)
    {
        break;
    }

    // now file content handling here
}

请注意,现在 std::ifstream 又回到了循环中,但现在不再有隐藏的外部实例。