从事 C++ 硬件项目。我们获得了将目录中的所有 .dat 文件读取到单个 .txt 文件中的代码,然后我们需要从中提取值,没有特定的顺序。我们得到的代码是:
#if defined(_WIN32)
#define listcmd "dir \b *.dat > datfiles.txt 2>nul"
#endif
这给了我一个文本文件,其中包含比 .dat 文件名更多的信息,不过……卷信息、目录路径、文件数据等。
然后我们执行以下操作来读取文件,但我不明白这是如何工作的:
system(listcmd);
ifstream datfiles("datfiles.txt");
for_each(istream_iterator<string>(datfiles), istream_iterator<string>(), analyze);
datfiles.close();
我一直在 cplusplus.com 上查看 istream_iterator 和 for_each 页面,但可以使用一些说明。这个 for_each 语句到底在做什么?
我认为它正在执行以下操作是否正确:
- 从 istream 一次读取一个字符串(停在空白处)
- 将该字符串传递给分析函数(以执行任何处理......在我的情况下尝试打开文件并读取值)
- 一旦控制返回,继续执行此操作直到到达文件末尾或流失败