ifstream按行读取文件内容

bool EventComp::GetCodeDescription( std::ifstream &ifInputFile, EventCodeDesc &eventCodeDesc )
{
    eventCodeDesc.clear();
    ifInputFile.seekg(0, std::ios::beg);
    while(ifInputFile.peek() != EOF)
    {
        char buf[256] = {0};
        ifInputFile.getline(buf, 256);
        std::string strLine(buf);
        std::string::size_type nStartPos = strLine.find_first_of("0123456789");
        std::string::size_type nEndPos = strLine.find_first_of("/t", nStartPos);

        if (nStartPos != std::string::npos && nEndPos != std::string::npos)
        {
            std::string strEventCode = strLine.substr(nStartPos, nEndPos-nStartPos);
            unsigned int nEventCode = atoi(strEventCode.c_str());
            std::string strEventDesc = strLine.substr(nEndPos + 1);

            eventCodeDesc[nEventCode] = strEventDesc;
        }
    }

    return true;
}

### C++ 使用 `ifstream` 读取文件内容 在 C++ 中,可以利用 `<fstream>` 库中的 `std::ifstream` 类来打开并读取文件内容。下面展示几种常见的方法。 #### 方法一:逐字符读取 通过循环调用 `get()` 函数可以从输入流中每次获取单个字符直到遇到文件结束符 EOF (End Of File)。 ```cpp #include <iostream> #include <fstream> int main() { char ch; std::ifstream infile("example.txt"); while (infile.get(ch)) { // 当未到达EOF时继续执 std::cout << ch; // 输出到控制台 } infile.close(); } ``` 这种方法适用于处理较小规模的数据或者当只需要按顺序访问每一个单独字符的情况[^1]。 #### 方法二:整读取 如果希望一次读入一行数据,则可采用 getline() 函数配合字符串变量一起工作: ```cpp #include <iostream> #include <string> #include <fstream> int main(){ std::string line; std::ifstream infile("example.txt"); while(std::getline(infile, line)){ std::cout << line << '\n'; } infile.close(); } ``` 此方式适合于文本文件,并且能够保留每一行之间的分隔信息[^2]。 #### 方法三:整体读取至缓冲区 对于已知大小的文件或者是想要一次性加载整个文件的情形下,可以直接将其全部内容复制到内存中的某个区域里去: ```cpp #include <iostream> #include <vector> #include <fstream> #include <iterator> int main(){ std::ifstream infile("example.txt", std::ios::binary | std::ios::ate); std::streamsize size = infile.tellg(); infile.seekg(0, std::ios::beg); std::vector<char> buffer(size); if (infile.read(buffer.data(), size)) std::cout.write(buffer.data(), size); infile.close(); } ``` 上述代码片段展示了如何以二进制模式 (`std::ios::binary`) 打开文件并将指针定位到最后(`std::ios::ate`) 来计算文件长度;之后再回到起始位置(`seekg`) 并分配适当的空间用于存储文件的所有字节[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值