当前位置: 首页 > news >正文

使用c风格和c++风格逐行读取文件

使用c风格和c++风格逐行读取文件

  • c语言风格读取
  • c++语言风格读取

c语言风格读取

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void copentest(std::string filename)
{
    FILE *file = fopen(filename.c_str(), "r");
    if (!file)
    {
        perror("无法打开文件");
        return;
    }
    // 获取文件大小
    fseek(file, 0, SEEK_END);
    long fileSize = ftell(file);
    fseek(file, 0, SEEK_SET);
    // 分配内存以一次性读取整个文件
    char *buffer = (char *)malloc(fileSize + 1);
    if (!buffer)
    {
        perror("内存分配失败");
        fclose(file);
        return;
    }
    // 读取文件内容到内存
    fread(buffer, 1, fileSize, file);
    buffer[fileSize] = '\0'; // 确保字符串以 '\0' 结尾
    fclose(file);
    // 解析每一行
    char *line = strtok(buffer, "\n");
    while (line)
    {
        line = strtok(NULL, "\n");
        if(line)
            printf("==%s\n",line);
    }
    free(buffer);
}

int main()
{
    std::string filename = "test.txt";
    clock_t st, end;
    st = clock();
    copentest(filename);
    end = clock();
    double usedtime = (double)(end - st) / CLOCKS_PER_SEC;
    printf("used time:%lf\n",usedtime);
    return 0;
}

c++语言风格读取

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

void iftest(std::string filename)
{
    std::ifstream file(filename); // 打开文件
    if (!file.is_open())
    {
        std::cerr << "无法打开文件" << std::endl;
        return;
    }
    std::vector<std::string> linevec;
    std::string line;
    while (std::getline(file, line))
    { // 从文件流中逐行读取
        linevec.push_back(line);
        // std::cout << line << std::endl; // 输出每行内容
    }
    std::cout<<"line num=="<<linevec.size()<<std::endl;
    file.close(); // 文件流离开作用域时也会自动关闭
}
int main()
{
    std::string filename = "test.txt";
    clock_t st, end;
    st = clock();
    iftest(filename);
    end = clock();
    double usedtime = (double)(end - st) / CLOCKS_PER_SEC;
    std::cout << "used :" << usedtime << std::endl;
    return 0;
}

相关文章:

  • 力扣19题——删除链表的倒数第 N 个结点
  • ping使用的协议,ping使用的协议是
  • linux系统测试网络pps、带宽和延时(方案来源于阿里云)
  • 解锁建造者模式:Java 编程中的对象构建秘籍
  • IT行业方向细分,如何做到专家水平——4.网络安全(Cybersecurity)
  • 进化强化学习
  • 计算机毕业设计PySpark+PyFlink+Hive地震预测系统 地震数据分析可视化 地震爬虫 大数据毕业设计 Hadoop 机器学习 深度学习
  • 自建 Redis 中设置 ACL 用户和权限
  • 【Matlab算法】基于人工势场的多机器人协同运动与避障算法研究(附MATLAB完整代码)
  • Unity与SVN集成:实现高效版本控制
  • Bigemap pro如何添加星图地球
  • MySQL创建存储过程和存储函数
  • ubuntu服务器部署
  • IPv4 协议和TCP 协议的区别
  • 玩转状态模式
  • mysql基础操作语句
  • 数据结构:Map Set(一)
  • 【Jenkins流水线搭建】
  • getContainer 是 Ant Design 中重要属性
  • 0基础学LabVIEW
  • 幼儿园教师拍打孩子额头,新疆库尔勒教育局:涉事教师已被辞退
  • 上海国际珠宝时尚功能区未来三年如何建设?六大行动将开展
  • “走进书适圈”:一周城市生活
  • 北方将现今年首场大范围高温天气,山西河南山东陕西局地可超40℃
  • 美国务卿鲁比奥抵达会场,将参加俄乌会谈
  • 受关税政策影响,沃尔玛将上调部分商品在美售价