Files
EJM_Display/FileOperation/ConfigFiles.cpp

153 lines
4.8 KiB
C++
Raw Normal View History

2025-08-20 23:06:28 +08:00
#include "ConfigFiles.h"
#include <QFile>
#include <QDebug>
2025-09-15 22:28:43 +08:00
#include <QFileInfo>
#include <QSettings>
2025-08-20 23:06:28 +08:00
ConfigFiles::ConfigFiles(QObject *parent) : QObject(parent)
{
2025-10-14 20:05:38 +08:00
}
void ConfigFiles::SystemConfig(){
QFileInfo checkFile("./ProgramConfig.ini");
QSettings File("./ProgramConfig.ini", QSettings::IniFormat);
if (checkFile.exists() && checkFile.isFile()) {
ConfigurationPath = File.value("System/ConfigurationPath").toString();
if(isDebug) qDebug()<<"配置文件路径:"<<ConfigurationPath;
}else{
qCritical()<<"未找到系统配置文件路径!";
File.setValue("System/ConfigurationPath","./");
}
QString Path = ConfigurationPath + "系统配置/SystemConfig.ini";
QFileInfo SystemConfigCheck(Path);
QSettings SystemConfig(Path, QSettings::IniFormat);
if (SystemConfigCheck.exists() && SystemConfigCheck.isFile()) {
TrailRefreshTime = SystemConfig.value("System/TrailRefreshTime").toUInt();
RTSP_Url = SystemConfig.value("System/RTSP_Url").toString();
if(isDebug) qDebug()<<"曲线刷新时间(秒):"<<TrailRefreshTime;
}else{
qCritical()<<"未找到曲线刷新时间配置!";
SystemConfig.setValue("System/TrailRefreshTime",10);
}
2025-08-20 23:06:28 +08:00
}
2025-09-15 22:28:43 +08:00
tsServerAddr ConfigFiles::ReadServerAddr(){
tsServerAddr SAddr;
2025-10-14 20:05:38 +08:00
QString Path = ConfigurationPath + "OpcUa配置/OpcUa_ServerConfig.ini";
qDebug()<<"OpcUa服务配置文件路径:"<<Path;
2025-09-15 22:28:43 +08:00
// 检查文件是否存在
2025-10-14 20:05:38 +08:00
QFileInfo checkFile(Path);
2025-09-15 22:28:43 +08:00
// 创建QSettings对象指定INI文件路径
2025-10-14 20:05:38 +08:00
QSettings File(Path, QSettings::IniFormat);
2025-09-15 22:28:43 +08:00
if (checkFile.exists() && checkFile.isFile()) {
// 如果文件已经存在
SAddr.Host = File.value("PLC_Server/Host").toString();
SAddr.UserName = File.value("PLC_Server/UserName").toString();
SAddr.Passwd = File.value("PLC_Server/Password").toString();
2025-10-14 20:05:38 +08:00
qDebug()<<"读取到的PLC 地址配置:"<<SAddr.Host<<" 用户名:"<<SAddr.UserName<<" 密码:"<<SAddr.Passwd;
2025-09-15 22:28:43 +08:00
} else {
// 如果文件不存在
File.setValue("PLC_Server/Host", SAddr.Host);
File.setValue("PLC_Server/UserName", SAddr.UserName);
File.setValue("PLC_Server/Password", SAddr.Passwd);
2025-10-14 20:05:38 +08:00
qDebug()<<"写配置文件 地址配置:"<<SAddr.Host<<" 用户名:"<<SAddr.UserName<<" 密码:";
2025-09-15 22:28:43 +08:00
}
return SAddr;
}
2025-08-20 23:06:28 +08:00
/**
* @brief ReadFile_Csv CSV
* @param &filePath CSV
* @return QList<QStringList> QStringList
*/
QList<QStringList> ConfigFiles::ReadFile_Csv(const QString &filePath){
QList<QStringList> rows;
QFile file(filePath);
2025-09-28 17:14:34 +08:00
QFileInfo testFile(filePath);
2025-08-20 23:06:28 +08:00
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
2025-09-28 17:14:34 +08:00
qWarning() << "CSV 打开失败:" << file.errorString()<<testFile.absoluteFilePath();
2025-08-20 23:06:28 +08:00
return rows;
}
2025-10-14 20:05:38 +08:00
2025-08-20 23:06:28 +08:00
QTextStream in(&file);
2025-09-15 22:28:43 +08:00
#if defined(Q_OS_LINUX) // 判断操作系统是否为Linux
in.setCodec("GBK"); // 如有需要可改成 "GBK"
#elif defined(Q_OS_WIN) // 判断操作系统是否为Windows
#else // 如果不是Linux也不是Windows
#endif
2025-08-20 23:06:28 +08:00
QStringList currentRow;
QString currentField;
bool inQuote = false;
while (!in.atEnd())
{
QString line = in.readLine();
// 处理跨行引号:如果上一行未闭合,继续拼
if (inQuote)
currentField += "\n";
else
currentField.clear();
for (int i = 0; i < line.size(); ++i)
{
QChar ch = line.at(i);
if (ch == '\"')
{
// 连续两个引号表示转义
if (i + 1 < line.size() && line.at(i + 1) == '\"')
{
currentField += '\"';
++i; // 跳过下一个引号
}
else
{
inQuote = !inQuote;
}
}
else if (ch == ',' && !inQuote)
{
// 字段结束
currentRow << currentField.trimmed();
currentField.clear();
}
else
{
currentField += ch;
}
}
// 如果引号已闭合,把最后一列也加入并结束本行
if (!inQuote)
{
currentRow << currentField.trimmed();
rows << currentRow;
currentRow.clear();
}
}
// 如果文件结尾时引号未闭合,把剩余部分作为最后一列
if (!currentField.isEmpty() || !currentRow.isEmpty())
{
currentRow << currentField.trimmed();
rows << currentRow;
}
file.close();
2025-10-14 20:05:38 +08:00
//qDebug() << "CSV 打开成功:" << file.errorString()<<testFile.absoluteFilePath()<<rows;
2025-08-20 23:06:28 +08:00
return rows;
}