C++ 批量打开写入文件
用到了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++ 批量打开写入文件的更多相关文章
- 个人永久性免费-Excel催化剂功能第103波-批量打开多文件或多链接
有时简单的东西,却带来许多的便利,为了让大家可以记住并容易找寻到此功能,也将这么简单的功能归为一波,反正已经100+波了,也无需为了凑功能文章而故意罗列一些小功能带忽悠性地让人觉得很强大. 使用场景 ...
- POI解析excel,将批量数据写入文件或数据库
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- PHP内置函数file_put_content(),将数据写入文件,使用FILE_APPEND 参数进行内容追加
file_put_contents(fileName,data,flags,context) 入参说明: 参数 说明 fileName 要写入数据的文件名 data 要写入的数据.类型可以是 stri ...
- [Python] python3 文件操作:从键盘输入、打开关闭文件、读取写入文件、重命名与删除文件等
1.从键盘输入 Python 2有两个内置的函数用于从标准输入读取数据,默认情况下来自键盘.这两个函数分别是:input()和raw_input(). Python 3中,不建议使用raw_input ...
- Ubuntu文件写入内容时出现错误 E121:无法打开并写入文件解决方案
在安装某些软件过程中会让你新建个txt或者在输入vim /etc/profile命令时,输入完毕后保存文件时就会报错 E121:无法打开并写入文件解决方案,一般的解决状况就是输入如下命令: :w !s ...
- C++文件操作:打开文件和写入文件
如果程序的运行结果仅仅显示在屏幕上,当要再次查看结果时,必须将程序重新运行一遍:而且,这个结果也不能被保留. 如果希望程序的运行结果能够永久保留下来,供随时查阅或取用,则需要将其保存在文件中. 文件分 ...
- C++文件操作:打开文件和写入文件 zz
http://www.weixueyuan.net/view/5825.html 如果程序的运行结果仅仅显示在屏幕上,当要再次查看结果时,必须将程序重新运行一遍:而且,这个结果也不能被保留. 如果希望 ...
- OpenWrite方法打开现有文件并进行写入
实现效果: 知识运用: File类的OpenWrite方法 //实现打开现有文件以进行写入 public static FileStream OpenWrite (string path) Encod ...
- vim中 E212:无法打开并写入文件的解决办法
很简单,就是用管理员身份打开这个文件 不要被网上的一些乱七八糟的迷惑了 sudo vim ....... 解决了问题请点个赞,谢谢
随机推荐
- LCTF (easy-100)
先安装跑一下,不知道为啥我这里模拟器打不开,传到手机上就可以.如下图. 一个输入框,一个按钮,随便输入提示no. 放入JEB反编译. 可以看到有6个Class.大体看一遍,b和e应该和解题无关,在类a ...
- python基础知识(函数)
创建函数 def 函数名(可以选参数): 可选参数 ''' ''' 用三引号括起来的注释 说明功能和参数信息 可选参数指定函数体 执行函数程序代码 创建一个空函数 def empty(): p ...
- Python3 Selenium自动化web测试 ==> 第九节 WebDriver高级应用 -- 操作select 和 alert
学习目的: 掌握页面常规元素的定位方法 场景: 网页正常的select元素下拉框常规方法和select专属方法 正式步骤: step1:常规思路select页面元素定位 处理HTML代码截图 # -* ...
- React Hook 学习
1.官方文档 https://react.docschina.org/docs/hooks-intro.html 2.阮一峰 reactHook http://www.ruanyifeng.com/b ...
- Linux中脚本运行错误(坏的解释器:没有那个文件或目录)
原因: 在Linux中有时候我们将在Windows下编写的脚本拷贝到Linux环境中运行时会出现运行不了的情况. 主要还是Windows的换行符为\r\n,而Linux环境中的换行符号为\n. 解决办 ...
- 再次挑戰UCOSII内核源码
上次打算看UCOSII(嵌入式实时操作系统)源码还是在大四下学期,当时搜集了很多资料源代码.文档.电子书.结果半路放弃了,究其原因 1.知识原因,虽然已经使用C语言一段时间,但是基础并不好,并没有参 ...
- springboot整合es客户端操作elasticsearch(四)
对文档查询,在实际开发中,对文档的查询也是偏多的,记得之前在mou快递公司,做了一套事实的揽件数据操作,就是通过这个来存储数据的,由于一天的数据最少拥有3500万数据 所以是比较多的,而且还要求查询速 ...
- Linux下nginx配置https协议访问的方法
一.配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module 查看nginx编译参数:/usr/local/nginx/sbin/ ...
- [转帖]如何在VirtualBox中运行macOS Catalina Beta版本
如何在VirtualBox中运行macOS Catalina Beta版本 secist2019-08-03共2179人围观系统安全 https://www.freebuf.com/articles/ ...
- oracle——学习之路(SQL基础)
使用create语句创建表 create table 表名 ( 列名 类型 [null | not null], 列名 类型 [null | not null] ) 在 ...