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);
    }
}

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

原文地址:https://www.cnblogs.com/rogation/p/3929964.html