00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <QDir>
00018 #include <stringutil.h>
00019
00020 #include "logfile.h"
00021
00022
00023
00024 LogFile::LogFile()
00025 {
00026 _file = 0;
00027 }
00028
00029
00030 LogFile::~LogFile()
00031 {
00032 if (_file) {
00033 delete _file;
00034 }
00035 }
00036
00037
00038 bool
00039 LogFile::createPathToFile(QString filename)
00040 {
00041 QDir dir = QFileInfo(filename).absoluteDir();
00042 if (!dir.exists()) {
00043 return dir.mkpath(dir.absolutePath());
00044 }
00045 return true;
00046 }
00047
00048
00049 bool
00050 LogFile::open(QString filename, QString *errmsg)
00051 {
00052 QFile *newLogFile;
00053
00054
00055 if (_file && _file->isOpen()) {
00056 if (_file->fileName() == filename) {
00057 return true;
00058 }
00059 }
00060
00061
00062 if (!createPathToFile(filename)) {
00063 return err(errmsg, "Unable to create path to log file.");
00064 }
00065
00066
00067 newLogFile = new QFile(filename);
00068 if (!newLogFile->open(QFile::WriteOnly|QIODevice::Append|QIODevice::Text)) {
00069 delete newLogFile;
00070 return err(errmsg, newLogFile->errorString());
00071 }
00072
00073
00074 if (_file) {
00075 delete _file;
00076 }
00077 _file = newLogFile;
00078 _stream.setDevice(_file);
00079 return true;
00080 }
00081
00082
00083 void
00084 LogFile::close()
00085 {
00086 if (_file) {
00087 delete _file;
00088 _file = 0;
00089 }
00090 }
00091
00092
00093 bool
00094 LogFile::isOpen()
00095 {
00096 return (_file && _file->isOpen());
00097 }
00098
00099
00100 QString
00101 LogFile::filename()
00102 {
00103 return (_file ? _file->fileName() : QString());;
00104 }
00105
00106
00107 LogFile&
00108 LogFile::operator<<(const QString &s)
00109 {
00110 if (_file) {
00111 _stream << s;
00112 _stream.flush();
00113 }
00114 return *this;
00115 }
00116