循环加载多个文件 (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
又回到了循环中,但现在不再有隐藏的外部实例。
我正在尝试加载文件夹中名称格式为“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
又回到了循环中,但现在不再有隐藏的外部实例。