/*############################################### * 常用函数集合 * * * * * ############################################*/ #include "toolkit.h" #include #include #include #include #include #include #include bool isDirExist(const QString & fullDirName, bool Crt) { QDir photo; bool exist = photo.exists(fullDirName); if (exist) { return true; //qDebug() << fullDirName << QString::fromLocal8Bit("::已存在"); } else { //创建文件夹 if(Crt)photo.mkdir(fullDirName); //qDebug() << fullDirName << QString::fromLocal8Bit("::不存在,创建"); } return false; } bool isFileExist(const QString & fullFileName, bool Crt) { QFile file(fullFileName); if (file.exists()) { //qDebug() << fullFileName << QString::fromLocal8Bit("::已存在"); return true; } if(Crt){ if(file.open(QIODevice::WriteOnly)){ //WriteOnly或ReadWrite当文件不存在时创建 file.flush(); file.close(); //qDebug() << fullFileName << QString::fromLocal8Bit("::已创建"); }; } return false; } QString createMultipleFoldes(const QString &fullDirName) { QString path=QDir::fromNativeSeparators(fullDirName);// 将\\转/ QDir dir(path); if(dir.exists()){ return dir.absolutePath(); } QString parent=createMultipleFoldes(path.mid(0,path.lastIndexOf("/"))); QString dirName=path.mid(path.lastIndexOf("/")+1); QDir parentPath(parent); if(!dirName.isEmpty()){ parentPath.mkpath(dirName); } return parent+"/"+dirName; } QString GetTimeStamp(QString Stamp) { QDateTime time = QDateTime::currentDateTime(); QString times = time.toString(Stamp); return times; } bool QSetFileTimes(const QString & filepath, QDateTime& CreationTime) { bool fing=true; if(!isFileExist(filepath))return false; #if (QT_VERSION &files, std::string format) { intptr_t hFile = 0;//文件句柄 struct _finddata_t fileinfo;//文件信息 std::string p; if ((hFile = _findfirst(p.assign(path).append("\\*" + format).c_str(), &fileinfo)) != -1) //文件存在 { do { if ((fileinfo.attrib & _A_SUBDIR))//判断是否为文件夹 { if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)//文件夹名中不含"."和".." { files.push_back(p.assign(path).append("\\").append(fileinfo.name)); //保存文件夹名 getAllFiles(p.assign(path).append("\\").append(fileinfo.name), files, format); //递归遍历文件夹 } } else { files.push_back(p.assign(path).append("\\").append(fileinfo.name));//如果不是文件夹,储存文件名 } } while (_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } } QJsonObject loadJsonCfg(const QString path) { QJsonObject json_object; try { QJsonParseError jsonError; QString json_cfg = path; if (json_cfg.isEmpty()) { qCritical() << " [error] " << __FUNCTION__ << " line:" << __LINE__ << " JsonPath is null!"; return json_object; } QFile JsonFile; JsonFile.setFileName(json_cfg); JsonFile.open(QIODevice::ReadOnly); QByteArray m_Byte = JsonFile.readAll(); if (m_Byte.isEmpty()) { qDebug() << __FUNCTION__ << " line:" << __LINE__ << json_cfg + " Content is empty"; JsonFile.close(); return json_object; } QJsonDocument jsonDocument(QJsonDocument::fromJson(m_Byte, &jsonError)); if (!jsonDocument.isNull() && jsonError.error == QJsonParseError::NoError) { if (jsonDocument.isObject()) { json_object = jsonDocument.object(); return json_object; } } else { qCritical() << " [error] " << __FUNCTION__ << " line:" << __LINE__ << json_cfg + " is error!"; } JsonFile.close(); } catch (QString ev) { qCritical() << " [error] " << __FUNCTION__ << " line:" << __LINE__ << " ev:" << ev; } return json_object; } QStringList ReadTextCfg(const QString path) { QString csvpath = path; // 读取每日csv QStringList lines; //配置信息列表 QFile configFile; configFile.setFileName(csvpath); bool isTxT = false; if (path.indexOf(".txt") != -1)isTxT = true; if (configFile.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream stream_text(&configFile); stream_text.setCodec(QTextCodec::codecForName("utf-8")); // //可读取中文 stream_text.seek(0); while (!stream_text.atEnd()) { lines.push_back(gb2312ToUtf8(stream_text.readLine())); } } else { qDebug() << "read csv " << csvpath << " failed!" << endl; } configFile.close(); return lines; } bool WriteTXTCfg(const QStringList& parm,const QString path) { QString fileName = path; QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return false; //用文本流读取文件 QTextStream stream(&file); //转换为字符串 for each (auto var in parm) { //写入文本流 stream << var << endl; } //关闭文件 file.close(); return true; } EncodingFormat FileCharacterEncoding(const QString& fileName) { //假定默认编码utf8 EncodingFormat code = EncodingFormat::UTF8; QFile file(fileName); if (file.open(QIODevice::ReadOnly)) { //读取3字节用于判断 QByteArray buffer = file.read(3); quint8 sz1st = buffer.at(0); quint8 sz2nd = buffer.at(1); quint8 sz3rd = buffer.at(2); if (sz1st == 0xFF && sz2nd == 0xFE) { code = EncodingFormat::UTF16LE; } else if (sz1st == 0xFE && sz2nd == 0xFF) { code = EncodingFormat::UTF16BE; } else if (sz1st == 0xEF && sz2nd == 0xBB && sz3rd == 0xBF) { code = EncodingFormat::UTF8BOM; } else { //尝试用utf8转换,如果无效字符数大于0,则表示是ansi编码 QTextCodec::ConverterState cs; QTextCodec* tc = QTextCodec::codecForName("utf-8"); tc->toUnicode(buffer.constData(), buffer.size(), &cs); code = (cs.invalidChars > 0) ? EncodingFormat::ANSI : EncodingFormat::UTF8; } file.close(); } return code; } QString gb2312ToUtf8(const QString strUtf8) { //printf("~~~~ utf8 str is:%s\n", strUtf8); QTextCodec* utf8Codec = QTextCodec::codecForName("utf-8"); QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312"); QString strUnicode = gb2312Codec->toUnicode(strUtf8.toLocal8Bit().data()); QByteArray ByteUtf8 = utf8Codec->fromUnicode(strUnicode); return ByteUtf8; }