QT xml 文件操作与 文件复制

本文介绍如何使用QT库来处理XML文件,特别是在更新检查中读取和写入文件信息。具体操作包括读取目录,获取每个文件的相对路径、版本、时间戳和大小,并将这些信息保存到config.xml中。同时,程序会将源目录的所有文件复制到目标位置。
摘要由CSDN通过智能技术生成

config.xml文件用于更新时检测是否有新的文件需要更新。本工具主要完成功能:读取一个给定目录,获得该目录下的所有文件信息(relativepath ,version,time,size...),并把所有文件信息存入config.xml.同时把该目录下所有文件复制到另外一个文件。

configGene.h

typedef struct FileInformation

{
  
    QString path;
    QString version;
    QString checksum;
    QDateTime time;
    int size;
}FileInformation;
这个结构体用于存储遍历目录时获得的文件信息,要写入config.xml
typedef struct ImportInforMation
{
  
    QString version;
    QString appid;
    QString siteid;
    QString skinid;
    QString language;
    QString hold;
}ImportInforMation;
这个结构体用于读取Site.xml文件中的根节点信息,要写入config.xml 的根节点


class ConfigGene

{
  
public:
        ConfigGene(QString &pathval, QString& relativePath, QString &configXmlPathval);
        ConfigGene(QString &pathval);
        ~ConfigGene();
        void setsiteXmlpath(QString Xmlpath);     //设置site.xml 绝对路径
        void setoutputXmlpath(QString outputpath); //设置output 路径
        bool findFile();   //遍历目录
        bool createConfigXml();  //生成 config.xml
        bool readsiteXml();    //read site.xml
        QString GetRelativePath( QString& strAbsoltPath, QString& basePath );   //获取相对路径
        QString getfileMd5(QString filepath);  //生成MD5值
        static bool copyDirectoryFiles(QString &srcpath,QString &despath);   //文件copy
 
private:
        QString path;   //需要遍历的目录
        QString relativePath; //用于得到相对目录的基目录
        QString siteXmlPath;  //Site.xml 路径
        QString configXmlPath; //config.xml 路径
        QString outputpath;     //复制所有文件的存储路径
        QList<FileInformation> listFile;    //存储文件信息的Qlist
        /*
         QList是一种表示链表的模板类。
         QList<T>是Qt的一种泛型容器类。它以链表方式存储一组值,并能对这组数据进行快速索引,还提供了快速插入和删除等操作。
         由于QList在链表两端都预先分配了内存,因此实现prepend()和append()操作都很快。
         QList以链表形式存储一组元素。默认为空链表,我们可以使用<<操作符添加元素:
         QList<QString> list;
         list << "one" << "two" << "three"; // list: ["one", "two", "three"]
         QList提供了一系列添加、移动、删除元素的操作:insert(), replace(), removeAt(), swap()
         。此外,它还提供了便于操作的函数:append(), prepend(), removeFirst(), removeLast()。
         at()操作比操作符[]更快,因为它不需要深度复制(deep copy)。
为了提高效率,QList的成员函数在使用前并不会验证其参数是否有效。除isEmpty()函数外,其它
成员函数都会假定该容器为非空容器;使用索引值(index)进行操作的成员函数都会假定其索引值参
数是在有效范围内的。这就意味着,QList在有些时候会出错。如果在编译时,我们定义了QT_NO_DEBUG
,编译过程中就不会检测这些错误。如果没有定义QT_NO_DEBUG,我们可以利用Q_ASSERT()或者
Q_ASSERT_X()加上一些合理的信息来实现错误检测。
        */

        FileInformation fileinfor;          // push_back Qlist前临时存储文件信息
        ImportInforMation importinfor;     //存储site.xml的信
 

};


configGene.cpp 

//通过strAboltpath,basepath得到相对路径
QString ConfigGene::GetRelativePath( QString& strAbsoltPath, QString& basePath )
{
     //比较两个路径,如果前面的相同则使用basepath,如果不同则使用遍历目录
    // QString 转 string 使用toStdString .string 转 char * 使用c_str
    if( strncmp( strAbsoltPath.toStdString().c_str(), basePath.toStdString().c_str(), basePath.toStdString().length() ) == 0 )
    {
   
        std::string str;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值