本文已参与「新人创作礼」活动,一起开启掘金创作之路:
QT中有时会遇到记录日志需求,但是每次在需要记录的地方都写一个读文件写文件实属很麻烦,甚至有时一不小心就忘记了close文件(虽然不知道忘记关闭文件会有什么后果,但总感觉很不好)。 @TOC
1 读写文件
首先什么是读写文件,为什么要去读写文件。
曾几何时,我调试代码的方式就是下断点和定点输出(我自己起的),下断点就不说了,大家都知道,那什么是定点输出呢:
在自己想要的地方输出自己想要的参数。
但是这两种方式对于大的项目就会很不实用,而且也不规范,记录成日志多高端啊。
QFile的简单使用
这里我读写文件使用的是QT中自带的QFile类,使用方法也是很简单: 首先引入必须的头文件:
#include <QFile>
然后:
QFile file("路径");//路径可以使用相对路径,也可以是绝对路径,这里建议用相对路径。
if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
qDebug()<<"error"<<endl;/*若打开文件错误,则输出error,这里由于是记录日志,
我的权限就是WriteOnly:只写*/
QTextStream gOutStream (&file);//创建文件输入流
gOutStream<<str<<"\n"<<endl;//输出到txt文件
gOutStream.flush();//刷新缓冲区
file.close();//关闭文件
这么一看是不是很简单?
2 封装模块
那么就下来就是对写日志的模块进行封装了:
首先创建一个Log文件夹,里面创建log.h/log.cpp文件:
#include <QString>
#include <QFile>
#include <QDebug>
class Log
{
public:
Log();
static void cin_httplog(QString str);//写入http日志
static void cin_errorlog(QString str);//写入错误日志
private:
static QString httplog;//HTTP日志路径
static QString errorlog;//错误日志路径
};
这里采用静态是为了在外部不进行实例化也可以调用函数。 具体实现:
Log::Log()
{
httplog = "./httplog.txt";
errorlog = "./errorlog.txt";
}
void Log::cin_httplog(QString str)
{
QFile file(httplog);
if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
qDebug()<<"error"<<endl;
QTextStream gOutStream (&file);
gOutStream<<str<<"\n"<<endl;//输出到txt文件
gOutStream.flush();//刷新缓冲区
file.close();
}
void Log::cin_errorlog(QString str)
{
QFile file(errorlog);
if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
qDebug()<<"error"<<endl;
QTextStream gOutStream (&file);
gOutStream<<str<<"\n"<<endl;//输出到txt文件
gOutStream.flush();//刷新缓冲区
file.close();
}
3 引用
那么模块写好了,去试试引用吧: 首先在需要用到的地方引入Log.h文件:
#include "Log.h"
然后就可以进行记录:
Log::cin_httplog( QDateTime::currentDateTime().toString("yyyy-MM-dd hh.mm.ss ") + "接收图片信息失败"); //输出到txt文件