用到了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. 【JVM学习笔记】线程上下文类加载器

    有许多地方能够看到线程上下文类加载的设置,比如在sun.misc.Launcher类的构造方法中,能够看到如下代码 先写一个例子建立感性认识 public class Test { public st ...

  2. sass与less对比学习

    参考链接:https://blog.csdn.net/luluan_lin/article/details/83749176

  3. 高性能Linux服务器

    TCP/IP协议族——高性能Linux服务器编程   现在 Internet 使用的主流协议族是 TCP/IP 协议族,它是一个分层.多协议的通信体系. TCP/IP 协议族体系结构以及主要协议 TC ...

  4. 关于字符串中每个单词的首字母大写化问题之 拆分split(/\s+/)

    var a = 'Hi, my name\'s Han Meimei, a SOFTWARE engineer'; //for循环 function titleCase(s) { var i, ss  ...

  5. [转帖]如何备份及恢复Linux文件权限

    如何备份及恢复Linux文件权限   http://embeddedlinux.org.cn/emb-linux/entry-level/201604/10-5337.html 三年前我就干过 chm ...

  6. FFmpeg4.0笔记:封装ffmpeg的解封装功能类CDemux

    Github https://github.com/gongluck/FFmpeg4.0-study/tree/master/Cff CDemux.h /*********************** ...

  7. 2019牛客暑期多校训练营(第二场) - B - Eddy Walker 2 - BM算法

    参考于: https://www.luogu.org/problemnew/solution/P4723 shadowice1984 (太难) https://www.cnblogs.com/zhgy ...

  8. 使用Qt 3D Studio 2.4显着提升性能(渲染速度提高了565%)

    发布于2019年6月18日星期二11评论Qt 3D Studio 2.4显着改善性能 发表于Biz Circuit&Dev Loop,设计,图形,性能,Qt 3D Studio 除了有效使用系 ...

  9. Online Meeting CodeForces - 420B (思维)

    大意: 给定某一段连续的上线下线记录, 老板上线或下线时房间无人, 并且每次会议都在场, 求哪些人可能是老板. 结论1: 从未出现过的人一定可以是老板. 结论2: 出现过的人中老板最多只有1个. 结论 ...

  10. postgresql11解压版安装windows

    一.准备安装包 下载地址:https://www.postgresql.org/download/windows/ 二.创建data目录(用于存储数据) 三.进入bin目录执行命令..初始化数据库并设 ...