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