【发布时间】:2012-09-13 07:11:02
【问题描述】:
我在 google 上确实没有找到满意的答案,而且 C++ 中的 I/O 有点棘手。如果可能的话,我想将文本文件逐块读取到向量中。唉,我不知道怎么做。我什至不确定我的无限循环是否会在所有可能性中被打破,因为 I/O 很棘手。所以,我能弄清楚的最好方法是:
char buffer[1025]; //let's say read by 1024 char block
buffer[1024] = '\0';
std::fstream fin("index.xml");
if (!fin) {
std::cerr << "Unable to open file";
} else {
while (true) {
fin.read(buffer, 1024);
std::cout << buffer;
if (fin.eof())
break;
}
}
请注意第二行的“\0”。这不奇怪吗?我可以做得更好吗?我可以将数据读入向量而不是字符数组吗?直接读入vector合适吗?
感谢您的回答。
PS。分块阅读确实有意义。这段代码很短,但我将它存储在循环缓冲区中。
【问题讨论】:
-
您的意思是普通的 C I/O 在 C++ 中不适合您?
int fd = open("file", O_RDONLY); if (fd >=0) { for (ssize_t rd=0; (rd=read(fd, buf, sizeof(buf))) > 0;) {do something;} close(fd); } -
有人告诉我,如果我有选择,不推荐使用 C 和 C++ 代码
-
我猜你想追加到向量,而不是每次循环都覆盖其中的内容?
-
顺便说一句,
fstream是为 istream(和 ostream)派生的,并支持read(char_type *, streamsize)(和write(const char_type *, streamsize))。所以只需将read输入buffer就可以了 -
@iwtu:你被告知错了,但这无关紧要。使用系统调用是一个很好的 C++ 代码:)
标签: c++ text-files ifstream