文件QFile
QFile类提供了一个用于读/写文件的接口,是一个可以用来读/写文本文件、二进制文件和Qt资源的I/O设备。QFile可以单独使用,也可以和QTextStream或者QDataStream一起使用,这样会更方便。一般在构建QFile对象时便指定文件名,当然也可以使用setFileName()在其他任何时间进行设置。无论在哪种操作系统上,文件名路径中的文件分隔符都需要使用‘/’符号。可以使用exists()来检查文件是否存在,remove()来删除一个文件。更多与文件系统相关的高级操作在QFileInfo和QDir类中提供。
- 一个文件可以使用open()来打开,使用close()来关闭,使用flush()来刷新;
- 文件的数据读/写一般使用 QDataStream 或者 QTextStream来完成,不过也可以使用继承自QIODevice类的一些函数,比如read()、readLine()、readAll()和write();
- 一次只操作一个字符的getChar()、putChar()和ungetChar()等函数;
- 可以使用size()函数来获取文件的大小;
- 使用seek()来定位到文件的任意位置;
- 使用pos()来获取当前的位置,使用atEnd()来判断是否到达了文件的末尾。
文件信息QFileInfo
QFileInfo类提供了与系统无关的文件信息,包括文件的名称和在文件系统中的位置(路径),文件的访问权限以及它是否是一个目录或者符号链接等。QFileInfo也可以获取文件的大小和最近一次修改/读取的时间等等,还可以获取Qt资源的相关信息。
- QFileInfo可以使用相对(relative)路径或者绝对(absolute)路径来指向一个文件;
- 使用isRelative()函数可以判断一个QFileInfo对象使用的是相对路径还是绝对路径,还可以使用makeAbsolute()来将一个相对路径转换为绝对路径;
- QFileInfo指向的文件可以在QFileInfo对象构建时设置,或者在以后使用setFile()来设置。
- 可以使用exists()来查看文件是否存在;
- 使用size()可以获取文件的大小;
- 文件的类型可以使用isFile()、isDir()和isSymLink()来获取;
- symLinkTarget()函数可以返回符号链接指向的文件的名称。
- 可以分别使用path()和fileName()来获取文件的路径和文件名;
- 可以使用baseName()来获取文件名中的基本名称;
- 使用suffix()来获取文件名的后缀,使用completeSuffix()来获取复合后缀。
- 文件的日期可以使用created()、lastModified()和lastRead()来返回;
- 访问权限可以使用isReadable()、isWritable()和isExecutable()来获取;
- 文件的所有权可以使用owner()、ownerId()、group() 和groupId()来获取;
- 可以使用permission()函数将文件的访问权限和所有权一次性读取出来。
示例代码
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//以只写的方式打开,如果文件不存在,那么会创建该文件。
QFile file("myfile.txt");
if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
qDebug() << file.errorString();
}
file.write("hello Qt!,OFile test!");
file.close();
//获取文件信息
QFileInfo info(file);
qDebug()<<"绝对路径:"<<info.absoluteFilePath();
qDebug()<<"文件名:"<<info.fileName();
qDebug()<<"基本名称:"<<info.baseName();
qDebug()<<"后缀:"<<info.suffix();
qDebug()<<"创建时间:"<<info.created();
qDebug()<<"大小:"<<info.size();
//以只读方式打开
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug() <<file.errorString();
}
qDebug()<<"文件内容:"<<file.readAll();
qDebug()<<"当前位置:"<<file.pos();
file.seek(0);
QByteArray array;
array = file.read(5);
qDebug()<<"前5个字符:"<<array
<<"当前位置:"<<file.pos();
file.seek(15);
array = file.read(5);
qDebug()<<"第16~20个字符:"<<array;
file.close();
return a.exec();
}
说明: 本文档大部分内容借鉴霍亚飞的《QtCreator快速入门》,在此表示感谢!