C++按 block 读取文本文件

标签 c++ text-files ifstream

我真的没有在谷歌上找到满意的答案,C++ 中的 I/O 有点棘手。如果可能的话,我想按 block 将文本文件读入 vector 。 las,我不知道该怎么做。我什至不确定我的无限循环是否会在所有可能性中中断,因为 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 而不是 char 数组吗?直接读入vector合适吗?

感谢您的回答。

附言。分块阅读确实有意义。这段代码很短,但我将其存储在循环缓冲区中。

最佳答案

您应该可以执行以下操作

 vector<char> buffer (1024,0);      // create vector of 1024 chars with value 0   
 fin.read(&buffer[0], buffer.size());

vector 中的元素保证连续存储,因此这应该有效 - 但您应该确保 vector 永远不会为空。我最近在这里问了一个类似的问题 - 查看标准 Can I call functions that take an array/pointer argument using a std::vector instead? 中的具体细节的答案

关于C++按 block 读取文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12401183/

相关文章:

python - 从文件中选择随机单词而不重复Python(集合)

当另一个进程对文本文件进行更改时,C# 会收到通知

c++ - 如何复制 ifstream 的状态?

c++ - VS 2012 的全新安装不会构建默认控制台应用程序 : Missing SDKDDKVer. h(和 stdio.h/CRT)

c++ - 在 gcc 中使用 printf 控制 float 的指数数字

C++ 慢,python 快? (就开发时间而言)

c++ - GCC:--whole-archive 和--no-whole-archive 选项

Java输出控制台错误消息到文件?

C++ ifstream 到 char *

c++ - ifstream 在 Xcode 中不起作用?