【发布时间】:2020-05-23 16:07:36
【问题描述】:
我的 ifstream 有问题。我想将 ifstream 分成 n 个部分。
例如 n = 3:
- Ifstream 包含文件的前 1/3。
- Ifstream 包含文件的后 1/3。
- Ifstream 包含文件的第三个 1/3。
std::ifstream in("test.txt");
std::vector<std::string> v1;
std::vector<std::string> v2;
std::vector<std::string> v3;
//first 1/3 of file
read(in, v1);
//second 1/3 of file
read(in, v2);
//third 1/3 of file
read(in, v3);
read(in, v){
std::string line {""};
while(getline(in, line)){
v.pushback(line);
}
}
【问题讨论】:
-
对不起,有很多方法。你想返回 3 个 ifstreams,你只想做 3 次读取吗?需要更多细节。
-
我想从流中的某些点读取 3 次
-
所以有 seekg() 和 tellg() 方法,可以帮助你找出文件的大小(以字节为单位),然后返回读取并测试是否达到了 1/3 或2/3。它们不会是准确的,因为这些行可能不会完全拆分文件。如果您想按行数拆分它,只能通过将整个文件读入一个行向量然后拆分该向量来完成。
-
问题是我无法在 read() 内部操作或更改参数。有没有办法只通过 2/3 的 ifstream?
-
然后创建三个 ifstream。获取文件的大小。将第二个 ifstream 查找到文件的 1/3,将第三个 ifstream 查找到文件的 2/3。是的,你必须创建 3 个单独的 ifstream,因为 ifstream 只能有一个状态并且不能被复制。
标签: c++ stream ifstream istream seekg