1.1    文件和目录

QFile、QBuffer和QTcpSocket可支持读写设备,用open函数打开,用write或putChar函数写入。用read和readLine或readAll进行读取数据,最后用 close函数进行关闭设备。

1.1.1            QFile读写文件

QFile构造函数输入参数文件路径和文件名称

setFileName:设置文件路径函数来设置;

exists:检查文件是否存在。

remove:删除文件

open:打开文件

(1)QFile实例代码:

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;

}

1.1.2            QTextStream和QDataStream异同

QTextStream和QDataStream都是面向数据流的,都适用于QIODevice,TextStream能做的事情QDataStream都能做。QTextStream 侧重于文本读写。这里所说的文本指的是普通的简单的QChar,QString,QLatin1Char,int等等之内的。而QDataStream则像一个容器一样,可以存放结构体等复杂数据类型,将数据序列化后按照先进先出的原则进行存储,存入的顺序和读出的顺序一定要一致,否则无法得到正确的数据。不仅可以读写text,而且还好可以读写一个特定数据类型,比如QPoint, QFont,几乎Qt支持的所有类型都可以使用QDataSream进行操作。

(1)QTextStream写入文本到文件

//下面代码就是写文件操作
QDir::setCurrent(QCoreApplication::applicationDirPath());//设置当前目录为程序运行目录

QFile data("output.txt");
if (data.open(QFile::WriteOnly | QFile::Truncate)) {
QTextStream out(&data);

out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7;
// writes "Result: 3.14 2.7 "
}

(2)QDataSream 写入结构体到文件

就拿读写QPoint为例:

QDir::setCurrent(QCoreApplication::applicationDirPath());//设置当前目录为程序运行目录

QFile fileout("file.dat");

fileout.open(QIODevice::WriteOnly);

QDataStream out(&fileout);   // we will serialize the data into the file

out << QString("the answer is");   // serialize a string

out << (qint32)42;        // serialize an integer

QPoint pos(8, 6);//序列化一个点到文件

out << pos;//序列化一个点到文件

fileout.close();//一定要关闭,否则下面读不到数据

QFile filein("file.dat");

filein.open(QIODevice::ReadOnly);

QDataStream in(&filein);    // read the data serialized from the file

QString str;

qint32 a;

QPoint tmp;

in >> str >> a>>tmp; // extract "the answer is" and 42

1.1.3            QIODevice类

QIODevice直接继承自QObject,QIODevice类是输入/输出设备的基类。为设备提供了公共实现和抽象接口用于读写块数据。QIODevice是一个抽象类,不能被实例化Q3Socket, Q3SocketDevice,QAbstractSocket,QBuffer,QFile,QLocalSocket,QNetworkReply,QProcess继承。

read,readLine,readAll读取文件中的数据;

write写入数据;

getChar,putChar,ungetChar函数实现单个字符的操作;

size:获取文件大小;

seek:定位到文件任意位置;

pos:获取当前位置;

atEnd判断是否到文件末尾;

1.1.4            QFileInfo类

构造函数传入QFile参数

SetFile设置QFile参数

Path:获取文件路径

FileName:获取文件的名称

baseName:获取文件基本名称

suffix:获取文件名称后缀

isFile,isDir,isSymLink 判断文件类型

实例代码

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

}

1.2    QDir类

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

QDir类提供了访问目录结构和它们的内容的与平台无关的方式。

QDir用来操作路径名称、关于路径和文件的访问信息和操作底层文件系统。

QDir使用相对或绝对文件路径来指向一个文件。绝对路径是从目录分隔符“/”或者带有一个驱动器标识(除了在Unix下)。如果你总是使用“/”作为目录分隔符,Qt将会把你的路径转化为符合底层的操作系统的。相对文件名是由一个目录名称或者文件名开始并且指定一个相对于当前路径的路径。

例如绝对路径:

QDir("/home/administrator/soft");

QDir("D:/software");

我们可以使用isRelative()或isAbsolute()函数确认QDir是用的相对路径还是绝对路径。使用makeAbsolute()来转换相对路径的QDir转换成绝对路径的QDir.

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

{

QCoreApplication app(argc, argv);

QDir dir;

dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);

dir.setSorting(QDir::Size | QDir::Reversed);

QFileInfoList list = dir.entryInfoList();

std::cout << " Bytes Filename" << std::endl;

for (int i = 0; i < list.size(); ++i) {

QFileInfo fileInfo = list.at(i);

std::cout << qPrintable(QString("%1 %2").arg(fileInfo.size(), 10)

.arg(fileInfo.fileName()));

std::cout << std::endl;

}

return 0;

}

QT文件(夹)操作---QFile、QDir、QFileInfo、QTextStream和QDataStream异同的更多相关文章

  1. [No000083]文件与文件夹操作

    #region Folder option 文件夹操作 /// <summary> /// 指定目录是否存在 /// </summary> /// <param name ...

  2. PHP 文件夹操作「复制、删除、查看大小」递归实现

    PHP虽然提供了 filesize.copy.unlink 等文件操作的函数,但是没有提供 dirsize.copydir.rmdirs 等文件夹操作的函数(rmdir也只能删除空目录).所以只能手动 ...

  3. .Net文件*夹*操作

    一.文件夹操作 Directory类,DirectoryInfo类.使用using System.IO命名空间 (一)创建文件夹 方法一: private string path = @"F ...

  4. iOS开发——Swift篇&文件,文件夹操作

    文件,文件夹操作   ios开发经常会遇到读文件,写文件等,对文件和文件夹的操作,这时就可以使用NSFileManager,NSFileHandle等类来实现. 下面总结了各种常用的操作:   1,遍 ...

  5. Python的文件与文件夹操作

    Python的文件与文件夹操作 Python OS模块 1.重命名:os.rename(old, new) 2.删除:os.remove(file) 3.列出目录下的文件 :os.listdir(pa ...

  6. linux —— 学习笔记(文件、文件夹操作)

    目录:1.常用的文件文件夹操作 2.文件属性的设置 1.常用的文件文件夹操作 mkdir  创建文件夹 -p 如果指定 a/b/c 时 a .b 不存在,一起创建出来 cp       复制文件或文件 ...

  7. c# 封装的文件夹操作类之复制文件夹

    c#  封装的文件夹操作类之复制文件夹 一.复制文件夹原理: 1.递归遍历文件夹 2.复制文件 二.FolderHelper.cs /// <summary> /// 文件夹操作类 /// ...

  8. Python_文件与文件夹操作

    ''' os模块除了提供使用操作系统功能和访问文件系统的简便方法之外,还提供了大量文件与文件夹操作的方法. os.path模块提供了大量用于路径判断.切分.连接以及文件夹遍历的方法. shutil模块 ...

  9. 文件及文件夹操作- File类、Directory 类、FileInfo 类、DirectoryInfo 类

    文件及文件夹操作: C/S:WinForm可以操作客户端文件 Client ServerB/S:Brower Server 命名空间:using system .IO; 1. File类: 创建:Fi ...

随机推荐

  1. SVN如何将版本库url访问地址中的https改为http

    1.选择控制台树中的根节点,右键选择“属性”. 2.切换至面板“网络”. 3.取消勾选项“使用安全连接协议(https://)”.

  2. Golang字符串格式化

    Go对字符串格式化提供了良好的支持.下面我们看些常用的字符串格式化的例子. package main import ( "fmt" "os" ) type po ...

  3. fjwc2019 D1T1 全连(dp+树状数组)

    #178. 「2019冬令营提高组」全连 显然我们可以得出一个$O(n^2)$的dp方程 记$f(i)$为取到第$i$个音符时的最大分数,枚举下一个音符的位置$j$进行转移. 蓝后我们就可以用树状数组 ...

  4. 01: docker 基本使用

    1.1 docker基础 1.docker与虚拟机比较 2.docker版本 1. 社区版(Community Edition, CE) 2. 企业版(Enterprise Edition, EE) ...

  5. win7 powershell配色方案

    首先我是参考微软的word的, look~ Windows PowerShell 配置文件 要配置powershell很简单, 就几步 1.显示 Windows PowerShell 配置文件的路径 ...

  6. 守护进程,互斥锁,IPC,队列,生产者与消费者模型

    小知识点:在子进程中不能使用input输入! 一.守护进程 守护进程表示一个进程b 守护另一个进程a 当被守护的进程结束后,那么守护进程b也跟着结束了 应用场景:之所以开子进程,是为了帮助主进程完成某 ...

  7. LD_RUN_PATH和LD_LIBRARY_PATH是干什么的?

    1. 使用场合 LD_RUN_PATH在链接时使用 LD_LIBRARY_PATH在执行时使用 2. 如何指定环境变量 export LD_LIBRARY_PATH=/opt/jello/lib:$L ...

  8. Java 使用命令对堆线程分析

    一.dump基本概念 在故障定位(尤其是out of memory)和性能分析的时候,经常会用到一些文件来帮助我们排除代码问题.这些文件记录了JVM运行期间的内存占用.线程执行等情况,这就是我们常说的 ...

  9. 2018 蓝桥杯省赛 B 组模拟赛(五)

    A模拟 代码1 #include<bits/stdc++.h> using namespace std; int n = 101; int a[120][120]; int ans = 0 ...

  10. CodeForces 430A Points and Segments (easy)(构造)题解

    题意:之前愣是没看懂题意...就是给你n个点的坐标xi,然后还规定了Li,Ri,要求给每个点染色,每一组L,R内的点红色和黑色的个数不能相差大于1个,问你能不能染成功,不能输出-1,能就按照输入的顺序 ...