1、QIODevice
直接继承自QObject

QIODevice类是输入/输出设备的基类。

QIODevice为设备提供了公共实现和抽象接口用于读写块数据。
QIODevice是一个抽象类,不能被实例化。

被Q3Socket,Q3SocketDevice,QAbstractSocket,QBuffer,QFile,QLocalSocket,QNetworkReply,QProcess继承.

===============================================================================================

2、QFile

继承自QIODevice

QFile类是一个操作文件的输入/输出设备。

QFile是用来读写二进制文件和文本文件的输入/输出设备。QFile可以自己单独被使用,但是如果和QDataStream或QTextStream一起使用将更加方便。

文件名通常可以通过构造函数来传递,但也可以使用setName()来设置。目录分隔符在任何操作系统下都使用“/",“/"不被支持。你可以通过exists()来检查一个文件是否存在并且可以通过remove()来移去一个文件。更多操作系统相关的高级文件系统操作QT提供了QFileInfo和QDir类.

文件可以用open()来打开、用close()来关闭、用flush()来刷新。数据通常可以使用QDataStream或者QTextStream进行读写,但你也可以使用read(),readLine(),readAll(),write()读写。QFile也支持getChar(),putChar(),和ungetChar()

size()可以返回文件的大小。你可以通过使用pos()函数得到当前文件位置或者使用seek()移到一个新的文件位置。如果你到了文件的末尾,atEnd()返回真。

例1:一行一行读取文件

#include <QtCore/QCoreApplication>

#include <QFile>

#include <QDebug>

#include <QTextCodec>

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv);

//中文支持

QTextCodec *codec = QTextCodec::codecForName("UTF-8");

QTextCodec::setCodecForCStrings(codec);

QFile file("/home/administrator/testdir/test.txt");

if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {

qDebug()<<"Can't open the file!"<<endl;

}

while(!file.atEnd()) {

QByteArray line = file.readLine();

QString str(line);

qDebug()<< str;

}

return a.exec();

}

使用QTextStream读取文件

#include <QtCore/QCoreApplication>

#include <QFile>

#include <QDebug>

#include <QTextCodec>

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv);

//中文支持

QTextCodec *codec = QTextCodec::codecForName("UTF-8");

QTextCodec::setCodecForCStrings(codec);

//QTextCodec::setCodecForTr(codec);

//QTextCodec::setCodecForLocale(codec);

QFile file("/home/administrator/testdir/test.txt");

if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {

qDebug()<<"Can't open the file!"<<endl;

}

QTextStream in(&file);

while( !in.atEnd()){

QString line = in.readLine();

qDebug() << line;

}

return a.exec();

}

QDataStream 重载了运算符了"<<"写数据,>>读数据

#include <QtCore/QCoreApplication>

#include <QFile>

#include <QDebug>

#include <QTextCodec>

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv);

//中文支持

QTextCodec *codec = QTextCodec::codecForName("UTF-8");

QTextCodec::setCodecForCStrings(codec);

//QTextCodec::setCodecForTr(codec);

//QTextCodec::setCodecForLocale(codec);

QFile file("/home/administrator/testdir/test.txt");

if(!file.open(QIODevice::ReadWrite | QIODevice::Text)) {

qDebug()<<"Can't open the file!"<<endl;

}

QTextStream stream(&file);

QString line_in;

//    while( !stream.atEnd()){

//        line_in = stream.readLine();

//        qDebug() << line_in;

//    }

//    stream.seek(stream.pos());

stream.seek(file.size());//将当前读取文件指针移动到文件末尾

int count = 0;

while(count < 10){

stream << QObject::trUtf8("新建行:") <<++count<<"/n";

}

stream.seek(0);//将当前读取文件指针移动到文件开始

while( !stream.atEnd()){

line_in = stream.readLine();

qDebug() << line_in;

}

return a.exec();

}

3、QDir

QDir类提供了访问目录结构和他们的内容。

QDir类提供了访问目录结构和它们的内容的与平台无关的方式。 
     QDir用来操作路径名称、关于路径和文件的访问信息和操作底层文件系统。 
     QDir使用相对或绝对文件路径来指向一个文件。绝对路径是从目录分隔符“/”或者带有一个驱动器标识(除了在Unix下)。如果你总是使用“/”作为目录分隔符,Qt将会把你的路径转化为符合底层的操作系统的。相对文件名是由一个目录名称或者文件名开始并且指定一个相对于当前路径的路径。 
例如绝对路径:
     QDir("/home/administrator/soft");
     QDir("D:/software");
     我们可以使用isRelative()或isAbsolute()函数确认QDir是用的相对路径还是绝对路径。使用makeAbsolute()来转换相对路径的QDir转换成绝对路径的QDir.

#include <QtCore/QCoreApplication>

#include <QDir>

#include <QList>

#include <QFileInfoList>

#include <QDebug>

#include <QTextCodec>

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv);

QTextCodec *codec = QTextCodec::codecForName("GB2312");

QTextCodec::setCodecForLocale(codec);

QTextCodec::setCodecForCStrings(codec);

QTextCodec::setCodecForTr(codec);

QDir d("D:/");

d.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks | QDir::AllDirs);//列出文件,列出隐藏文件(在Unix下就是以.开始的为文件),不列出符号链接(不支持符号连接的操作系统会忽略)

d.setSorting(QDir::Size | QDir::Reversed);//按文件大小排序,相反的排序顺序

const QFileInfoList list = d.entryInfoList();//返回这个目录中所有目录和文件的QFileInfo对象的列表

QFileInfoList::const_iterator iterator = list.begin();

qDebug() << "目录和文件的数量: " << d.count();//返回找到的目录和文件的数量

qDebug() << "fileName/t/t/tsize/t/t/t";

while(iterator != list.end()){

qDebug() << (*iterator).fileName()<<"/t/t/t"<<(*iterator).size();

iterator++;

}

qDebug() << "当前目录: " << d.current();//返回应用程序当前目录。

qDebug() << "当前目录的绝对路径" << d.currentPath();//返回应用程序当前目录的绝对路径。

//    const QList<QString> list = d.entryList(); //返回这个目录中所有目录和文件的名称的列表

//    QList<QString>::const_iterator iterator = list.begin();

//    while(iterator != list.end()){

//        qDebug() << (*iterator);

//        iterator++;

//    }

return a.exec();

}

运行结果:

4、QFileInfo

QFileInfo类提供了一个与平台无关的文件信息.

QFileInfo提供了关于系统中的文件名称和位置,访问权限和是否是符号链接,文件大小和上次修改/读写时间等,也能被用于Qt资源文件。

QFileInfo能通过相对/绝对路径指向一个文件。

可以使用isFile(),isDir(),isSymLink().symLinkTarget()函数提供符号链接的目标文件。

在Unix(包括Mac OS X)的符号链接具有与目标文件相同的大小(),因为Unix透明地处理符号链接;同样,打开一个符号连接使用的QFile有效地打开链接的目标.

在Windows中,符号链接(快捷方式)的lnk文件。它大小()的是,符号链接(而不是链接的目标)的大小,打开一个符号连接使用的QFile并打开。lnk文件。例如

#include <QtCore/QCoreApplication>

#include <QFileInfo>

#include <QDebug>

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv);

QFileInfo info1("E:/meego/vi_command.lnk");

qDebug() << info1.isSymLink();

qDebug() << info1.absoluteFilePath();

qDebug() << info1.size();

qDebug() << info1.symLinkTarget();

qDebug() << "**********************";

QFileInfo info2(info1.symLinkTarget());

qDebug() << info2.isSymLink();

qDebug() << info2.absoluteFilePath();

qDebug() << info2.size();

return a.exec();

}

运行结果:

#include <QtCore/QCoreApplication>

#include <QFileInfo>

#include <QDebug>

#include <QTextCodec>

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv);

QTextCodec *codec = QTextCodec::codecForName("GB2312");

QTextCodec::setCodecForLocale(codec);

QTextCodec::setCodecForCStrings(codec);

QTextCodec::setCodecForTr(codec);

QFileInfo info("E:/meego/基本命令与VI.Command.txt");

qDebug() << info.baseName();//不包括后缀名

qDebug() << info.bundleName();//只有在Mac OS才有用,其它平台为空字符串

qDebug() << info.suffix();//后缀名

qDebug() << info.completeBaseName();//不包括后缀名

qDebug() << info.completeSuffix();//完整的后缀名

return a.exec();

}

运行结果:

QT QFile、QDir、QFileInfo的使用相关推荐

  1. QT——QFile、QDir、QFileInfo

    目录 QFile QDir 目录用法 文件用法 静态方法 QDir中的Filter枚举变量 QDir中的SortFlag枚举变量 QDir 名称过滤器 设置显示特定扩展名 QFileInfo QFil ...

  2. Qt QFile文件操作详解

    Qt QFile文件操作详解 很多应用程序都需要具备操作文件的能力,包括对文件内容进行读/写.创建和删除文件等,甚至某些应用程序的诞生纯粹是为了操作文件,比如 WPS Office.PDFedit 等 ...

  3. c++ Qt5学习笔记 2021-1-21(文件系统QFile、QFileInfo、QDir、QFileSystemWatcher等使用,读取文本显示乱码,QDataStream二进制字节流读写)

    文件目录操作相关类: QFile:除了打开文件操作外,QFile还有复制文件.删除文件等功能. QCoreApplication:用于提取应用程序路径.程序名等文件信息. QFileInfo:用于提取 ...

  4. QT笔记——QDir,QFileInfo类

    #include<QDir> QDir这是一个获取路径类 常用的方法有: 路径是否为空 isEmpty() QString str = "D:/QT5.12test/test/m ...

  5. Qt扫盲-QDir类的学习和使用

    Qt5的QDir类的学习 文章目录 Qt5的QDir类的学习 概述: 相对路径与绝对路径 相对性判断 存在性判断 相对路径转绝对路径 导航和路径操作 获取和设置QDir的值 切换路径 新建删除重命名文 ...

  6. QDir, QFileInfo 和 QDirIterator 区别

    这三个类相互有关联,但是有不尽相同,首先从名字上看,QDir 和 QDirIterator 是针对于文件目录的,也就是文件夹,我们知道,对于一个文件夹,可以包含很多文件,也可以包含其他文件夹,通常是一 ...

  7. Qt -- QFile文件读写操作

    对于文件的读写操作,C 和 C++ 都各有一套方式.而在 Qt 中也有一套,即使用 QFile 对文件进行读和写操作. 文件的打开方式 文件路径说明:(windows-release编译) QFile ...

  8. Qt QFile按行读写数据

    1. 包含的头文件 #include <QDebug> #include <QFile> 2. 读数据 QFile file("inputFile.txt" ...

  9. Qt文件QFile 和文件夹QDir

    一.QFileInfo的简单用法 参考链接:http://blog.sina.com.cn/s/blog_3e62c50d01013xd4.html QFileInfo的几个构造函数: QFileIn ...

最新文章

  1. 初学架构设计的第一步:需求、愿景与架构
  2. php使用webservivce_基于SSM框架实现简单的登录注册的示例代码
  3. 命令模式 java_JAVA中的命令模式实例教程
  4. 区块链教程Fabric1.0源代码分析Chaincode(链码)体系总结
  5. Android 各种工
  6. 【视觉项目】【day2】8.21号实验记录(手机固定高度15cm拍摄+直方图均衡化+模板匹配,模板12个,测试28个,效果十分差)
  7. PAT乙级 1003
  8. 科技驰援背后:技术没有假期!
  9. c# 中的除法运算需要注意
  10. 思科ASDM导入与实战配置经验总结-操作系统版本V842
  11. C#与twincat软件建立通信
  12. 有源码如何搭建网站(从零开始搭建教程)
  13. Minimum supported Gradle version is 4.10.1. Current version is 4.6.
  14. #详解# 激活函数中的 饱和、软饱和、硬饱和
  15. js检测开发者工具是否打开 防止别人调试代码
  16. Windows 7/8 创建WIFI热点
  17. 深度学习推荐系统实战笔记
  18. Unity游戏开发:文字冒险游戏项目实战
  19. 中国人工智能学会通讯——AI Platform for Business: Research Roadmap
  20. NMOS与PMOS的导通条件与使用方法

热门文章

  1. vue.js毕业设计,基于vue.js前后端分离教室预约小程序系统设计与实现
  2. 12 个 Pandas Numpy 函数:数据分析提速 50% 不是问题!
  3. FIPS202:AVX2 版本的 C/C++ 实现
  4. matlab optimeset函数,matlab 中的 linprog函数
  5. 生成DOCKER图片镜像
  6. leetcode 45.跳跃游戏2
  7. java 抽象语法树(AST)系列一:概述
  8. 智能手机Q1出货量陷入衰退,三星缘何逆势增长?
  9. transformer xl 用于文本生成
  10. 【转】背井离乡,为何仍要打拼北上广?---转自百度云