QT文件(夹)操作---QFile、QDir、QFileInfo、QTextStream和QDataStream异同
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异同的更多相关文章
- [No000083]文件与文件夹操作
#region Folder option 文件夹操作 /// <summary> /// 指定目录是否存在 /// </summary> /// <param name ...
- PHP 文件夹操作「复制、删除、查看大小」递归实现
PHP虽然提供了 filesize.copy.unlink 等文件操作的函数,但是没有提供 dirsize.copydir.rmdirs 等文件夹操作的函数(rmdir也只能删除空目录).所以只能手动 ...
- .Net文件*夹*操作
一.文件夹操作 Directory类,DirectoryInfo类.使用using System.IO命名空间 (一)创建文件夹 方法一: private string path = @"F ...
- iOS开发——Swift篇&文件,文件夹操作
文件,文件夹操作 ios开发经常会遇到读文件,写文件等,对文件和文件夹的操作,这时就可以使用NSFileManager,NSFileHandle等类来实现. 下面总结了各种常用的操作: 1,遍 ...
- Python的文件与文件夹操作
Python的文件与文件夹操作 Python OS模块 1.重命名:os.rename(old, new) 2.删除:os.remove(file) 3.列出目录下的文件 :os.listdir(pa ...
- linux —— 学习笔记(文件、文件夹操作)
目录:1.常用的文件文件夹操作 2.文件属性的设置 1.常用的文件文件夹操作 mkdir 创建文件夹 -p 如果指定 a/b/c 时 a .b 不存在,一起创建出来 cp 复制文件或文件 ...
- c# 封装的文件夹操作类之复制文件夹
c# 封装的文件夹操作类之复制文件夹 一.复制文件夹原理: 1.递归遍历文件夹 2.复制文件 二.FolderHelper.cs /// <summary> /// 文件夹操作类 /// ...
- Python_文件与文件夹操作
''' os模块除了提供使用操作系统功能和访问文件系统的简便方法之外,还提供了大量文件与文件夹操作的方法. os.path模块提供了大量用于路径判断.切分.连接以及文件夹遍历的方法. shutil模块 ...
- 文件及文件夹操作- File类、Directory 类、FileInfo 类、DirectoryInfo 类
文件及文件夹操作: C/S:WinForm可以操作客户端文件 Client ServerB/S:Brower Server 命名空间:using system .IO; 1. File类: 创建:Fi ...
随机推荐
- 数据库中char和varchar区别
区别: 1)char长度是固定,而varchar长度是可变的: 比如:'abc'对于char(10)表示存储字符将占10个字节(包括7个空字符),而同样varchar(10)只占3个自己长度,10只是 ...
- 牛客网数据库SQL实战(16-20)
16.统计出当前各个title类型对应的员工当前薪水对应的平均工资.结果给出title以及平均工资avg.CREATE TABLE `salaries` (`emp_no` int(11) NOT N ...
- 呼叫中心获取sip数据报文
1.下载sngrep并且安装: 运行 ./sngrep 进入呼叫列表,空格选中呼叫流,进入 2.呼叫信息 回车进入原始窗口 空格选中两条消息流,回车进入消息差异窗口 F8设置
- 关于python hashlib模块的使用
hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法 #!/usr/bin/ ...
- Python3 tkinter基础 grid(row,column) 窗体的布局
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- 给sublime设置格式化代码的快捷键
sublime中自建的有格式化按钮: Edit -> Line -> Reindent 只是sublime并没有给他赋予快捷键,所以只需加上快捷键即可 Preference -& ...
- Flask学习【第5篇】:用Falsk实现的分页
Flask实现的分页组件 from urllib.parse import urlencode,quote,unquote class Pagination(object): "" ...
- Linux rsync 命令学习
Rsync命令和cp命令很像,但是功能似乎更加复杂点,主要用来备份数据.看了网上一堆介绍的文章,感觉不是很通俗易懂.下面按照我的理解,做一些笔记: 同步方式 之前接触过一些同步软件,例如坚果云.百度云 ...
- 【Dalston】【第四章】容错保护(Hystrix)
我们在实践微服务架构时,通常会将业务拆分成一个个微服务,微服务之间通过网络进行通信,进行互相调用,造成了微服务之间存在依赖关系.我们知道由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如 ...
- Cannot retrieve metalink for repository: epel 错误解决办法
centos下安装完EPEL源, 然后更新一下yum缓存, 如果发现这样的错误:Error: Cannot retrieve metalink for repository: epel. Please ...