使用流插入运算符读取文件
Using the stream insertion operator to read files
我碰巧遇到了一个从文件中读取文本的代码示例,如下所示:
int i;
char *fileName = "text.txt";
ifstream fin(fileName);
while (fin >> i)
{
do something;
}
这段代码实际上打开并读取空格分隔的文本,但我不明白它是如何工作的。如何在没有"打开"或"读取"命令的情况下打开文件?有没有办法倒回文件的开头?我正在尝试创建一个动态分配的数组,直到我计算了文件的分数数之后,我才知道如何做。
如何在没有"打开"或"读取"命令的情况下打开文件?
ifstream
构造函数将打开该文件。
有没有办法倒回文件的开头?
使用 seekg()
.如果已到达EOF,则需要在呼叫seekg()
之前呼叫clear()
。
我正在尝试创建一个动态分配的数组
如果允许,您可以使用std::vector
来存储读取的文本,从而避免两次读取文件的内容。
该文件由std::ifstream
类的构造函数打开。
您可以使用fin.seekg(std::ios::beg);
来倒带文件,但最好使用例如std::vector
或std::list
,您可以在其中使用 push_back()
推送新元素,而无需事先知道元素的数量。
但是,由于家庭作业显然明确要求您使用手动分配的数组和指针,因此这样的事情就可以完成了这项工作:
#include <fstream>
#include <iostream>
#include <iterator>
int main()
{
std::ifstream fin("text.txt");
size_t n = 0;
int i;
for (; fin >> i; ++n);
fin.clear();
fin.seekg(0, std::ios::beg);
int *scores = new int[n];
std::istream_iterator<int> first(fin), last;
std::copy(first, last, scores);
std::copy(scores, scores+n, std::ostream_iterator<int>(std::cout, " "));
std::cout << "n";
delete[] scores;
}
相关文章:
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 读取文件的最后一行并输入到链接列表时出错
- 为什么在读取文件大小时文件IO速度会发生变化
- 读取文件时运行时的未知行为
- 如何逐行读取文件,每行中的内容都用空格分隔并将其写入新文件中
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C++ 读取文件读取文件不正确
- 读取文件并将其存储在unordered_map中时出现问题
- 读取文件时无法使用 OpenMP 获得加速
- 使用istringstearm和get行缓慢读取文件
- 如何继续读取不同功能中的文件,而不是从头开始再次读取文件?
- 读取文件时引发异常
- 从标准输入读取文件后读取用户输入
- 在读取文件后重置句柄
- 如何在C++编译时读取文件?
- std::ifstream 在读取文件中最后一项时设置 eofbit,但仅在读取数值类型时发生
- 读取文件在第二次调用时返回INVALID_HANDLE
- 通过指针读取文件
- 逐行读取文件,并将数据插入变量和数组中