• Qt模拟C#的File类对文件进行操作


    其实只是QT菜鸟为了练习而搞出来的

    文件头:

    #include <QFile>
    #include <QString>
    #include <iostream>
    #include <QTextCodec>
    #include <QTextStream>
    
    enum Encoding
    {
        ASCII = 0,
        Unicode = 1,
        UTF32 = 2,
        UTF7 = 3,
        UTF8 = 4,
        GBK = 5
    };
    
    class File
    {
    public:
        File();
    
        static void Create(QString path);                                                   //创建文件,如果文件存在则覆盖
        static bool Exist(QString path);                                                    //判断文件是否存在
        static void AppendAllText(QString path, QString content, Encoding encode);          //向现有文件内追加数据
        static void AppendAllText(QString path, QString content);                           //向现有文件内追加数据
        static void AppendAllLines(QString path,QStringList lines, Encoding encode);        //向现有文件内追加多行数据
        static void AppendAllLines(QString path,QStringList lines);                         //向现有文件内追加多行数据
        static void WriteAllText(QString path,QString content,Encoding encode);             //创建新文件并写入文件,如果有文件则覆盖
        static void WriteAllText(QString path,QString content);                             //创建新文件并写入文件,如果有文件则覆盖
        static void WriteAllLines(QString path,QStringList content,Encoding encode);        //创建新文件并写入多行数据,如果文件存在则覆盖
        static void WriteAllLines(QString path,QStringList content);                        //创建新文件并写入多行数据,如果文件存在则覆盖
        static QString ReadAllText(QString path,Encoding encode);                           //读取文件
        static QString ReadAllText(QString path);                                           //读取文件
        static QStringList ReadAllLines(QString path,Encoding encode);                      //读取文件内所有的行
        static QStringList ReadAllLines(QString path);                                      //读取文件内所有的行
        static void Copy(QString sourceFileName,QString destFileName,bool overwrite);       //拷贝文件
        static void Copy(QString sourceFileName,QString destFileName);                      //拷贝文件
        static void Move(QString sourceFileName,QString destFileName);                      //移动文件
        static void Delete(QString path);                                                   //删除文件
        static void Rename(QString path,QString name);                                      //重命名
    
    private:
        static QTextCodec* GetCode(Encoding code);
    
    };

    源文件:

    File::File()
    {
    }
    
    bool File::Exist (QString path)
    {
        QFile file(path);
        return file.exists ();
    }
    
    QTextCodec* File::GetCode (Encoding code)
    {
        QTextCodec* c;
        switch(code)
        {
        case Encoding(0):
            c = QTextCodec::codecForName ("ASCII");
            break;
        case Encoding(1):
            c = QTextCodec::codecForName ("Unicode");
            break;
        case Encoding(2):
            c = QTextCodec::codecForName ("UTF-32");
            break;
        case Encoding(3):
            c = QTextCodec::codecForName ("UTF-7");
            break;
        case Encoding(4):
            c = QTextCodec::codecForName ("UTF-8");
            break;
        case Encoding(5):
            c = QTextCodec::codecForName ("GBK");
            break;
        }
        return c;
    }
    
    void File::Create (QString path)
    {
        Delete(path);
        QFile file(path);
        file.open (QIODevice::WriteOnly);
        file.close ();
    }
    
    QString File::ReadAllText (QString path, Encoding encode)
    {
        QString text;
        if(Exist (path))
        {
            QFile file(path);
            QTextStream stream(&file);
            stream.setCodec (GetCode(encode));
            stream.seek (0);
            text = stream.readAll ();
        }
        return text;
    }
    
    QString File::ReadAllText (QString path)
    {
        return ReadAllText(path,Encoding(1));
    }
    
    QStringList File::ReadAllLines (QString path, Encoding encode)
    {
        QStringList ts;
        if(Exist (path))
        {
            QFile file(path);
            QTextStream stream(&file);
            stream.setCodec (GetCode(encode));
            stream.seek (0);
            int index = 0;
            while(!stream.atEnd ())
            {
                QString t = stream.readLine (index);
                ts.append (t);
                index++;
            }
        }
        return ts;
    }
    
    QStringList File::ReadAllLines (QString path)
    {
        return ReadAllLines(path,Encoding(1));
    }
    
    void File::WriteAllText (QString path, QString content, Encoding encode)
    {
        Delete(path);
        Create(path);
        QFile file(path);
        QTextStream stream(&file);
        stream.seek (0);
        stream.setCodec (GetCode (encode));
        stream << content;
        file.close ();
    }
    
    void File::WriteAllText (QString path, QString content)
    {
        WriteAllText(path,content,Encoding(1));
    }
    
    void File::WriteAllLines (QString path, QStringList content, Encoding encode)
    {
        Delete(path);
        Create(path);
        QFile file(path);
        QTextStream stream(&file);
        stream.seek (0);
        stream.setCodec (GetCode (encode));
        for ( QStringList::Iterator it = content.begin(); it != content.end(); ++it )
                    stream << *it << "
    ";
        file.close ();
    }
    
    void File::WriteAllLines (QString path, QStringList content)
    {
        WriteAllLines(path,content,Encoding(1));
    }
    
    void File::AppendAllText (QString path, QString content, Encoding encode)
    {
        if(!Exist (path))Create(path);
        QString text = ReadAllText(path, encode);
        text += content;
        WriteAllText(path,text,encode);
    }
    
    void File::AppendAllText (QString path, QString content)
    {
        AppendAllText(path,content,Encoding(1));
    }
    
    void File::AppendAllLines (QString path, QStringList lines, Encoding encode)
    {
        if(!Exist (path))Create(path);
        QString text = ReadAllText(path, encode);
        text += "
    ";
        foreach(QString s,lines)
        text += (s + "
    ");
        WriteAllText(path,text,encode);
    }
    
    void File::Copy (QString sourceFileName, QString destFileName, bool overwrite)
    {
        if(Exist (destFileName) && overwrite)
        {
            QFile file(destFileName);
            file.remove ();
        }
        if(!Exist (destFileName))
        {
            QFile::copy (sourceFileName,destFileName);
        }
    }
    
    void File::Copy (QString sourceFileName, QString destFileName)
    {
        Copy(sourceFileName,destFileName,false);
    }
    
    void File::Delete (QString path)
    {
        QFile file(path);
        if(file.exists ())
        {
            file.remove ();
        }
    }
    
    void File::Rename (QString path, QString name)
    {
        if(Exist(path))
        {
            QFile file(path);
            QString oldName = file.fileName ();
            QFile::rename (oldName,name);
        }
    }

    花了不少时间搞定了,不过并没有做测试,有没有问题我也不知道……

  • 相关阅读:
    Mysql备份工具xtraback全量和增量测试
    Linux进程管理四大工具ps dstat top htop
    Linux Netcat 命令——网络工具中的瑞士军刀
    Linux 下载工具 aria2
    C语言宏基础总结
    使用浏览器做编辑器
    设计模式(1)
    OpenGL 编程(1)
    使用ffmpeg推流
    FFMPEG 解码和编码(编码mjpeg)
  • 原文地址:https://www.cnblogs.com/rogation/p/3929964.html
Copyright © 2020-2023  润新知