用到了C++17的filesystem 库

说明:这个函数主要是用来处理日志中不同Thread的日志,主要目的是将不同Thread的日志写到不同的文件中

int GetThreadTime(const char * INPUT, const char * OutputFolder)
{
std::map<std::string, std::ofstream> mapWrite;
std::filesystem::path pth(INPUT);
if(exists(pth))
{
std::cout << INPUT <<"文件存在\n";
}
else
{
std::cout<< INPUT << "文件不存在\n";
return 0;
} if (!std::filesystem::exists(OutputFolder))
{
std::filesystem::create_directory(OutputFolder);
} fstream fi(INPUT,ios_base::in);
char buf[2048]{0};
std::string str;
char paths[256]{0};
while (fi.getline(buf,sizeof(buf)))
{
str.clear();
str = buf;
if (str.find("CalculateDownloadCostTime") != std::string::npos) //key value
{
std::string sthread;
findThreadId(str,sthread); //获取Thread ID,string类型
long stattime,stoptime;
int costtime;
getStartTime(str,&stattime,&stoptime,&costtime); //获取日志行中的参数,本处是开始时间,结束事件,花费时间
auto result = mapWrite.find(sthread);
if (result == mapWrite.end())
{
sprintf_s(paths,sizeof(paths),"%s%s.txt",OutputFolder,sthread.c_str());
std::ofstream fo(paths,ios_base::app);
fo << "threadid " << sthread << "XXXXXXX logs\n";
mapWrite.insert(std::pair<std::string, std::ofstream>(sthread,std::move(fo))); //注意:本处要么用std::move要么用shared_ptr,因为map需要为对象分配内存,而且ofstream也是uncopyable
//http://coliru.stacked-crooked.com/a/c4486879ce9d4db0
//https://stackoverflow.com/questions/42920744/cant-we-manage-stdmapstring-ofstream
}
else
{
result->second << "threadid " << sthread << "XXXXXXX logs\n";
} }
else
{
memset(buf,0,sizeof(buf));
continue;
} memset(buf,0,sizeof(buf));
}
for (auto& element : mapWrite)
{
element.second.close(); //批量释放句柄
}
return 0;
}

C++ 批量打开写入文件的更多相关文章

  1. 个人永久性免费-Excel催化剂功能第103波-批量打开多文件或多链接

    有时简单的东西,却带来许多的便利,为了让大家可以记住并容易找寻到此功能,也将这么简单的功能归为一波,反正已经100+波了,也无需为了凑功能文章而故意罗列一些小功能带忽悠性地让人觉得很强大. 使用场景 ...

  2. POI解析excel,将批量数据写入文件或数据库

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  3. PHP内置函数file_put_content(),将数据写入文件,使用FILE_APPEND 参数进行内容追加

    file_put_contents(fileName,data,flags,context) 入参说明: 参数 说明 fileName 要写入数据的文件名 data 要写入的数据.类型可以是 stri ...

  4. [Python] python3 文件操作:从键盘输入、打开关闭文件、读取写入文件、重命名与删除文件等

    1.从键盘输入 Python 2有两个内置的函数用于从标准输入读取数据,默认情况下来自键盘.这两个函数分别是:input()和raw_input(). Python 3中,不建议使用raw_input ...

  5. Ubuntu文件写入内容时出现错误 E121:无法打开并写入文件解决方案

    在安装某些软件过程中会让你新建个txt或者在输入vim /etc/profile命令时,输入完毕后保存文件时就会报错 E121:无法打开并写入文件解决方案,一般的解决状况就是输入如下命令: :w !s ...

  6. C++文件操作:打开文件和写入文件

    如果程序的运行结果仅仅显示在屏幕上,当要再次查看结果时,必须将程序重新运行一遍:而且,这个结果也不能被保留. 如果希望程序的运行结果能够永久保留下来,供随时查阅或取用,则需要将其保存在文件中. 文件分 ...

  7. C++文件操作:打开文件和写入文件 zz

    http://www.weixueyuan.net/view/5825.html 如果程序的运行结果仅仅显示在屏幕上,当要再次查看结果时,必须将程序重新运行一遍:而且,这个结果也不能被保留. 如果希望 ...

  8. OpenWrite方法打开现有文件并进行写入

    实现效果: 知识运用: File类的OpenWrite方法 //实现打开现有文件以进行写入 public static FileStream OpenWrite (string path) Encod ...

  9. vim中 E212:无法打开并写入文件的解决办法

    很简单,就是用管理员身份打开这个文件 不要被网上的一些乱七八糟的迷惑了 sudo vim ....... 解决了问题请点个赞,谢谢

随机推荐

  1. Hadoop、Hbase —— 服务启动、验证、停止

    一.Hadoop  1.启动Hadoop cd /usr/local/hadoop-2.7.3/sbin ./start-dfs.sh 启动过程如下: 2.验证Hadoop是否启动成功 2.1.在主节 ...

  2. golang实现生产者消费者模型

    生产者消费者模型分析 操作系统中的经典模型,由若干个消费者和生产者,消费者消耗系统资源,生产者创造系统资源,资源的数量要保持在一个合理范围(小于数量上限,大约0).而消费者和生产者是通过并发或并行方式 ...

  3. Java类的加载及初始化

    每个类的编译代码都存在于它自己的独立文件中,该文件在需要使用该程序代码时才会被加载.通常有以下三种加载情况: (1) 访问了子类的静态变量或静态方法:仅对类的静态变量,静态块执行初始化操作,并仅初始化 ...

  4. three.js效果之热力图和轨迹线

    1.热力图 开始的时候,是用一个网上找的canvas画渐变热点的demo,原理就是给定顶点坐标,然后画圆,颜色使用渐变色,根据权重决定渐变的层数(红色->橙色->绿色) . 但是终究觉得这 ...

  5. server 2008 R2 DHCP服务器部署

    安装DHCP服务器 和上一篇文章中安装IIS 7.0一样,我们在安装DHCP服务器的时候也要用到Windows Server 2008的服务器安装器. 首先打开服务器管理器,点击开始菜单——>管 ...

  6. Python全栈开发之5、模块

    一.模块 1.import导入模块 #1.定义 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑),本质就是.py结尾的python文件,实现一个功能 包:python package 用 ...

  7. Prefix to Infix Conversion

    Infix : An expression is called the Infix expression if the operator appears in between the operands ...

  8. [转帖]java注解与注释注解区别

    https://baijiahao.baidu.com/s?id=1615942718081024481&wfr=spider&for=pc 还需要仔细看一下书的 书里面都有. jav ...

  9. Idea 控制台Tomcat乱码设置

    找到tomcat安装目录,进入conf目录,找到logging.properties文件 把默认的 java.util.logging.ConsoleHandler.encoding = UTF-8 ...

  10. 通过using声明改变个别成员的可访问性

    C++的语法中通过在派生类中使用using声明可以忽略继承方式 , 而让派生类对于基类的私有和保护成员具有特殊的访问权限 , 甚至可以改变派生类对象对于基类成员的访问权限 . 个人认为这种语法很容易让 ...