一、文件操作

QFile和QFileInfo:

 #include <QCoreApplication>
#include <QFileInfo>
#include <QStringList>
#include <QDateTime>
#include <QDebug> int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//以只写方式打开,如果文件不存在,那么会创建该文件
QFile file("myfile.txt");
if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
qDebug()<<file.errorString();
file.write("helloQt!\nyafeilinux");
file.close();
//获取文件信息
QFileInfo info(file);
qDebug()<<QObject::tr("绝对路径:")<<info.absoluteFilePath()<<endl
<<QObject::tr("文件名:")<<info.fileName()<<endl
<<QObject::tr("基本名称:")<<info.baseName()<<endl
<<QObject::tr("后缀:")<<info.suffix()<<endl
<<QObject::tr("创建时间")<<info.created()<<endl
<<QObject::tr("大小")<<info.size();
//以只读方式打开
if(!file.open(QIODevice::ReadOnly|QIODevice::Text))
qDebug()<<file.errorString();
qDebug()<<QObject::tr("文件内容:")<<endl<<file.readAll();
qDebug()<<QObject::tr("当前位置")<<file.pos();
file.seek();
QByteArray array;
array = file.read();
qDebug()<<QObject::tr("前5个字符:")<<array
<<QObject::tr("当前位置:")<<file.pos();
file.seek();
array = file.read();
qDebug()<<QObject::tr("第16-20个字符")<<array;
file.close(); return a.exec();
}

总结:

QFile file("myfile.txt");    //创建一个文件,里面是路径

file.open(QIODevice::WriteOnly|QIODevice::Text)  //以只读打开,写text
file.write("helloQt!\nyafeilinux");    //写入
file.close();    //关闭
file.seek(0);    //定位
array = file.read(5);  //读取

QObject::tr("绝对路径:")<<info.absoluteFilePath()<<endl
QObject::tr("文件名:")<<info.fileName()<<endl
QObject::tr("基本名称:")<<info.baseName()<<endl
QObject::tr("后缀:")<<info.suffix()<<endl
QObject::tr("创建时间")<<info.created()<<endl
QObject::tr("大小")<<info.size();

QObject::tr("当前位置")<<file.pos();
 

二、文件系统和监视器QFilesystemWatcher

首先创建一个MainWindow的QT项目,然后在控件中添加一个List Widget部件:

mainwindow.h添加:

QFileSystemWatcher myWatcher;
void showMessage(const QString &path);
 #include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDir> MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(&myWatcher,SIGNAL(directoryChanged(QString)),this,SLOT(showMessage(QString)));
connect(&myWatcher,SIGNAL(fileChanged(QString)),this,SLOT(showMessage(QString)));
//显示出当前目录下的所有.h文件
QDir myDir(QDir::currentPath());                      //相当于linux下的ls命令的输出
myDir.setNameFilters(QStringList("*.h"));                 //然后筛选的后缀为.h的文件
ui->listWidget->addItem(myDir.absolutePath()+tr("目录下的.h文件有:"));  //这里显示的是绝对路径
ui->listWidget->addItems(myDir.entryList());                //这里输出了用setNameFilters过滤后的信息
//创建目录,并将其加入到监视器中
myDir.mkdir("mydir");                              //创建了一个目录
myDir.cd("mydir");                                //linux内的cd指令
ui->listWidget->addItem(tr("监视的目录:")+myDir.absolutePath());     
myWatcher.addPath(myDir.absolutePath());                   //把目录加到myWatcher中
//创建文件,并将其加入到监视器中
QFile file(myDir.absolutePath()+"/myfile.txt"); //myDir的目录是会通过cd()改变的
if(file.open(QIODevice::WriteOnly))                      //创建文件
{
QFileInfo info(file);
ui->listWidget->addItem(tr("监视的文件:")+info.absoluteFilePath());  //监视的路径
myWatcher.addPath(info.absoluteFilePath());               //增加监视的路径
file.close();
}
} MainWindow::~MainWindow()
{
delete ui;
} void MainWindow::showMessage(const QString &path)
{
QDir dir(QDir::currentPath()+"/mydri");
//如果是目录发生了改变
if(path == dir.absolutePath())
{
ui->listWidget->addItem(dir.dirName()+tr("目录发生改变:"));
ui->listWidget->addItems(dir.entryList());
}
else //如果是文件发生了改变
{
ui->listWidget->addItem(path+tr("文件发生改变!"));
}
}

QT文件和目录的更多相关文章

  1. Qt5.7中使用MySQL Driver(需要把libmysql.dll文件拷贝到Qt的bin目录中。或者自己编译的时候,链接静态库)

    Qt5.7中使用MySQL Driver 1.使用环境 Qt5.7的安装安装就已经带了MySQL Driver,只需要在安装的时候选择一下即可.如果没有安装,可以采取自己编译的方式.在Qt的源码包的q ...

  2. 通过pro文件使Qt的build目录更清爽

    1.指定moc存放的路径,Qt moc编译器生成的moc文件 unix:MOC_DIR = ../tmp win32:MOC_DIR = ../tmp 2.指定目标文件存放的路径,生成的dll或者ex ...

  3. Qt 文件处理(readLine可以读取char[],并且有qSetFieldWidth qSetPadChar 等全局函数)

    Qt 文件处理 Qt提供了QFile类来进行文件处理,为了更方便地处理文本文件或二进制文件,Qt还提了QTextStream类和QDataStream类,处理临时文件可以使用QTemporaryFil ...

  4. 用QFileSystemWatcher来监视文件和目录的改变(内部还是使用了timer)

    Use Case: 两个程序共享同一个Configuration文件,当一个程序作出改变的时候,需要另外一个程序能够及时响应. 之前其实猜的八九不离十,估计是有一个Timer,然后定时查询Config ...

  5. error: open of glibc-devel-2.12-1.132.el6.i686.rpm failed: 没有那个文件或目录

    在安装qt的时候出现了错误: error: open of glibc-devel-2.12-1.132.el6.i686.rpm failed: 没有那个文件或目录 错误原因:缺少glibc-dev ...

  6. Qt 文件的操作

    文件操作是应用程序必不可少的部分.Qt 作为一个通用开发库,提供了跨平台的文件操作能力.从本章开始,我们来了解下 Qt 的文件以及输入输出的功能,也就是 I/O 系统. Qt 通过QIODevice提 ...

  7. Qt warning: 构建目录必须和源文件目录为同级目录

    从一台电脑转移项目到另一电脑, 路径发生变化,重新构建运行时会出现“QT 构建目录必须和源目录为同级目录”提示,解决办法很加单.如下: 方法一: 点击 project(项目)->然后,看看Bui ...

  8. QT文件(夹)操作---QFile、QDir、QFileInfo、QTextStream和QDataStream异同

    1.1    文件和目录 QFile.QBuffer和QTcpSocket可支持读写设备,用open函数打开,用write或putChar函数写入.用read和readLine或readAll进行读取 ...

  9. Qt文件读写操作

    原文地址:https://www.cnblogs.com/flowingwind/p/8336159.html QFile Class 1.read读文件 加载文件对象  QFile file(&qu ...

随机推荐

  1. Vue的跨域设置

    1.在使用vue开发的时候经常要涉及到跨域的问题,其实在vue cli中是有我们设置跨域请求的文件的. 2.当跨域无法请求的时候我们可以修改工程下config文件夹下的index.js中的dev:{} ...

  2. html中ul,ol和li的区别

    ul是无序列表,全称是unordered list,先来个例子:    ●张三    ●李四    ●王二    ●刘五   ol是有序列表 ,全称是ordered list,同样举个例子:  1.张 ...

  3. Apache + Tomcat 集群的配置

    公司最近新接了一个项目,客户要求WEB SERVER 必须是APACHE,,由于之前的项目一直都是NGINX,,无奈啊,,由于对方的IT又是在三哥的过度,经过一番的争执只能顺应三哥三姐的要求..

  4. 测开之路三十:Flask基础之jinja2模板继承

    实现某些位置的内容固定,某些位置的内容动态展示,如: 中文文档地址:http://docs.jinkan.org/docs/jinja2/templates.html#template-inherit ...

  5. configure error libmcrypt was not found解决方法

    安装到mcrypt的时候出现了问题./configure提示出错,首先提示*** Could not run libmcrypt test program, checking why-*** The ...

  6. spring boot 尚桂谷学习笔记05 ---Web

    ------web 开发登录功能------ 修改login.html文件:注意加粗部分为 msg 字符串不为空时候 才进行显示 <!DOCTYPE html> <!-- saved ...

  7. 插件化框架解读之Class文件与Dex文件的结构(一)

    阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 Class文件 Class文件是Java虚拟机定义并被其所识别的 ...

  8. HDU 5159 Card( 计数 期望 )

    Card Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  9. cf:c题

    题目: 代码: #include<iostream> #include<algorithm> #include<vector> #include<string ...

  10. docker--build自己的image

    通过container commit成image [root@localhost docker_test]# docker container commit #可以简写成docker commit a ...