Qt之QFile

Qt4的 QFile直接继承自QIODevice,Qt5 QFile继承自 QFileDevice;

        QFile提供读写文本,二进制文件和资源的IO设备;可以单独使用,大多时候都是与QTextStream或QDataStream联合使用;

普通函数

创建名字为newName的链接文件,不会覆盖文件系统中已经存在的实体;
(1) bool link(const QString &newName);

静态成员,创建名为newName的链接文件,指向oldname
(2) static bool link(const QString &oldname, const QString &newName);

复制名为filename()的文件到newName
如果被复制的文件是一个符号链接,则复制它所引用的文件,而不是链接本身,除复制权限外,不复制其他文
件元数据。
(3) bool copy(const QString &newName);

静态成员,复制链接文件到新文件
如果被复制的文件是一个符号链接,则复制它所引用的文件,而不是链接本身,除复制权限外,不复制其他文
件元数据。
(4) static bool copy(const QString &fileName, const QString &newName);

示例:
    QFile file;
    file.setFileName(CONFFILEPATH+"/"+"systemSet.txt");

    if(!file.open(QIODevice::ReadWrite | QIODevice::Text)){
        qDebug() << "open file " << CONFFILEPATH << "failed" << endl;
        return;
    }

    //创建链接文件
    if(file.link(CONFFILEPATH+"/"+"systemSet-link.txt")){
        qDebug() << "link file suc" <<  endl;
    }else {
        qDebug() << "link file failed :" << file.errorString() <<endl;
    }

    //复制链接文件到新文件,实际上复制的是链接文件所链接的源文件
    if(file.copy(CONFFILEPATH+"/"+"systemSet-link.txt",CONFFILEPATH+"/"+"copy.txt")){
        qDebug() << "copy file suc" << file.error() <<  endl;
    }else{
        qDebug() << "copy file failed : " << file.errorString() << endl;
    }


    file.close();

提示1:在linux下运行时,将程序拷贝到sd挂载运行时,会出现link()没有权限! 
提示2:对于静态成员函数, file.copy(oldName, newName)与QFile::copy(oldName, newName)一样;
同QIODevice打开模式;
(1) bool open(OpenMode flags) override;

在给定模式下打开现有的文件句柄f。handleFlags可以用来指定其他选项。如果成功返回true;
(2) bool open(FILE *f, OpenMode ioFlags, FileHandleFlags handleFlags=DontCloseHandle);
enum FileHandleFlag {

    /*传递给open()的文件句柄应该由close()关闭,默认的行为是close只是刷新文件,
    应用程序负责关闭文件句柄。当按文件名打开一个文件时,这个标志被忽略,
    因为Qt总是拥有文件句柄并且必须关闭它。*/
    AutoCloseHandle = 0x0001,

    //如果没有显式关闭,在销毁QFile对象时,底层文件句柄将保持打开状态;默认标志;
    DontCloseHandle = 0  
};

官方示例:
#include <stdio.h>

void printError(const char* msg)
{
    QFile file;
    file.open(stderr, QIODevice::WriteOnly);
    file.write(msg, qstrlen(msg));        // write to stderr
    file.close();
}

除了参数1不同;其余同上
(3) bool open(int fd, OpenMode ioFlags, FileHandleFlags handleFlags=DontCloseHandle);
使用 exists()检查文件是否存在;    
使用 remove()移除一个文件; 
open() 打开; close()关闭; flush()刷新;    
数据通常读和写使用QDataStream或QTextStream;    
size() 返回文件大小;    
pos() 获取当前文件位置;    
seek() 移动一个新的文件位置;    
atEnd()判断返回末尾;

示例:

QFile file(CONFFILEPATH+"/"+"systemSet.txt");

if(!file.open(QIODevice::ReadWrite | QIODevice::Text)){
    qDebug() << "open file " << CONFFILEPATH << "failed" << endl;
    return;
}

QTextStream in(&file);
//in.setCodec("utf-8");
in.setCodec(QTextCodec::codecForName("System"));//win上中文读取乱码
//linux没找到好方法; 可参考: https://bbs.csdn.net/topics/394476303?list=67203446

while(!in.atEnd())
{
    QString line = in.readLine();
    qDebug() << line << endl;
}

file.close();

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值