点击(此处)折叠或打开
- //storageinterface.h
-
#ifndef STORAGEINTERFACE_H
-
#define STORAGEINTERFACE_H
-
-
namespace XUPT {
-
class StorageInterface;
-
}
-
-
#include <QString>
-
-
template <typename T>
-
class StorageInterface
-
{
-
public:
-
virtual bool open() = 0;
-
virtual T read() = 0;
-
virtual void write(const T& info) = 0;
-
virtual void close() = 0;
-
virtual void clear() = 0;
-
};
-
- #endif // STORAGEINTERFACE_H
点击(此处)折叠或打开
- //counterfile.h
-
#ifndef COUNTERFILE_H
-
#define COUNTERFILE_H
-
-
#include "storageinterface.h"
-
#include <QString>
-
#include <QFile>
-
#include <QTextStream>
-
-
//#include <iostream>
-
using namespace std;
-
-
class CounterFile : public StorageInterface<QString>
-
{
-
public:
-
CounterFile(int unitId, int shift);
-
~CounterFile();
-
virtual bool open();
-
// 每次返回一组counter值(counterId:counter),文件结束返回""
-
// 例如 "3:120" 表示ID为3,counter为120
-
virtual QString read();
-
// 每次写入的info格式为(counterId:counter)
-
virtual void write(const QString& info);
-
virtual void close();
-
virtual void clear();
-
private:
-
QString path;
-
QString file_path;
-
QByteArray line;
-
//QString str_line;
-
QFile *pfile;
-
QTextStream *in;
-
QDataStream *clearin;
-
string counter_id;
-
string counters;
-
int size;
-
};
-
- #endif // COUNTERFILE_H
点击(此处)折叠或打开
- //counterfile.cpp
- #include "counterfile.h"
-
#include <QDebug>
-
#include <QStringList>
-
-
CounterFile::CounterFile(int unitId, int shift)
-
{
-
path = unitId + 48; // to ascii: 1 -> "1"
-
path += shift + 48;
-
path += "_c"; // exp:"01_c" 表示机组为C0,班次为1的Counter统计文件
-
}
-
-
CounterFile::~CounterFile()
- {
-
}
-
-
bool CounterFile::open()
-
{
-
-
file_path = path + ".txt";
-
pfile = new QFile(file_path);
-
-
if (pfile->open(QIODevice::ReadWrite | QIODevice::Text)) {
-
qDebug() << "open ok!";
-
return true;
-
} else if (!pfile->open(QIODevice::WriteOnly)) {//如果文件不存在就创建
-
pfile->close();
-
if (pfile->open(QIODevice::ReadWrite | QIODevice::Text)) {
-
qDebug() << "open ok!";
-
return true;
-
} else {
-
qDebug() << "open wrong!";
-
return false;
-
}
-
} else
-
return false;
-
}
-
-
QString CounterFile::read()
-
{
-
-
if (pfile->atEnd()) {
-
qDebug() << "read1";
-
return "";
-
} else {
-
qDebug() << "read2";
- line = pfile->readLine();
-
return line;
-
}
-
}
-
-
void CounterFile::write(const QString &info)
-
{
-
in = new QTextStream(pfile);
-
in->seek(pfile->size());//指针移到文件尾,保证以追加的方式写入
-
*in << info << '\n';
-
delete in;
-
qDebug() << "write test3";
-
}
-
-
void CounterFile::close()
-
{
-
qDebug() << "close1";
-
pfile->close();
-
qDebug() << "close2";
-
delete pfile;
-
qDebug() << "close";
-
}
-
-
void CounterFile::clear()
-
{
-
pfile->remove();
-
pfile->open(QIODevice::WriteOnly);
-
pfile->close();
-
if (pfile->open(QIODevice::ReadWrite | QIODevice::Text)) {
-
return ;
-
}
- }
点击(此处)折叠或打开(测试。。。。。。)
- //main.cpp
-
#include "mainwindow.h"
-
#include "counterfile.h"
-
#include <QApplication>
-
#include <QDebug>
-
-
int main(int argc, char *argv[])
-
{
-
// QApplication a(argc, argv);
-
// MainWindow w;
-
-
CounterFile cntfile(3, 5);
-
cntfile.open();
-
cntfile.write("2:23");
-
cntfile.write("2:23");
-
cntfile.write("2:23");
-
cntfile.write("2:23");
-
-
// qDebug() << cntfile.read();
-
// qDebug() << cntfile.read();
-
// qDebug() << cntfile.read();
-
// qDebug() << cntfile.read();
-
//cntfile.close();
-
-
//cntfile.open();
-
qDebug() << cntfile.read();
-
qDebug() << cntfile.read();
-
qDebug() << cntfile.read();
-
qDebug() << cntfile.read();
-
qDebug() << cntfile.read();
-
qDebug() << cntfile.read();
-
//cntfile.close();
-
-
qDebug() << "-------------------1";
-
-
// qDebug() << cntfile.read();
-
// qDebug() << cntfile.read();
-
// qDebug() << cntfile.read();
-
// qDebug() << cntfile.read();
-
- //CounterFile cntfile1(5, 6);
-
//cntfile.open();
-
cntfile.write("2:23");
-
cntfile.write("2:23");
-
cntfile.write("2:23");
-
cntfile.write("2:23");
-
// qDebug() << cntfile1.read();
-
// qDebug() << cntfile1.read();
-
// qDebug() << cntfile1.read();
-
// qDebug() << cntfile1.read();
-
// qDebug() << cntfile1.read();
-
// qDebug() << cntfile1.read();
-
cntfile.close();
-
-
qDebug() << "-------------file2";
-
-
cntfile.open();
-
// cntfile1.write("2:23");
-
// cntfile1.write("2:23");
-
// cntfile1.write("2:23");
-
// cntfile1.write("2:23");
-
-
// qDebug() << cntfile.read();
-
// qDebug() << cntfile.read();
-
// qDebug() << cntfile.read();
-
// qDebug() << cntfile.read();
-
-
-
//cntfile.clear();
- qDebug() << cntfile.read();
-
qDebug() << cntfile.read();
-
qDebug() << cntfile.read();
-
qDebug() << cntfile.read();
-
qDebug() << cntfile.read();
-
qDebug() << cntfile.read();
- cntfile.close();
-
-
qDebug() << "-------------------5";
-
return 0;
- }