Qt5文件及磁盘处理
#include <QCoreApplication>
#include <QFile>
#include <QtDebug>
/*
* 打开一个文件有两种方式。一种方式是在构造函数中指文件名;另一种方式是使用setFileName()函数设置文件名。
*
* 打开文件使用open()函数,关闭文件使用close()函数。此处的open()函数以只读方式打开文件,只读方式参数为
* QIODevice::ReadOnly,只写方式参数为QIODevice::WriteOnly,读写参数为QIODevice::ReadWrite。
*
* qint64 lineLen = file.readLine(buffer, sizeof(buffer)):在QFile中可以使用从QIODevice中继
* 承的readLine()函数读取文件中的一行。
*
* if(LineLen != -1){qDebug() << buffer}:如果读取成功,则readLine()函数返回实际读取的字节数;如果
* 读取失败,则返回“-1”
*
*/
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFile file("textFile1.txt");
if(file.open (QIODevice::ReadOnly))
{
char buffer[1024];
qint64 LineLen = file.readLine (buffer, sizeof(buffer));
if(LineLen != -1)
{
qDebug() << buffer;
}
}
file.close ();
return a.exec();
}
#include <QCoreApplication>
#include <QFile>
#include <QTextStream>
/*
* 将内容写入到文件中
*
* if(data.open(QFile::WriteOnly | QFile::Truncate))表示将原来文件中的内容清空。输出时将格式设为左对齐,占10个
* 字符位置。
*
* out << QObject::tr ("score:") << qSetFileWidth(10) << left << 90 <<endl:用户使用格式化函数和流操作符设
* 置需要的输出格式。其中,qSetFieldWidth ()函数是设置字宽度的格式化函数。除此之外,QTextStream还提供了其他一些格式
* 化函数
*/
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFile data("data.txt");
if(data.open(QFile::WriteOnly|QFile::Truncate))
{
QTextStream out(&data);
out<<QObject::tr("score:")<<qSetFieldWidth(10)<<left<<90<<endl;
}
return a.exec();
}
函数 | 功能描述 |
qSetFieldWidth(int width)
|
设置字段宽度
|
qSetPadChar(Qchar ch)
|
设置填充字符
|
qSetRealNumberPercision(int precision)
|
设置实数精度 |
操作符 | 作用描述 |
bin |
设置读写的整数为 二进制数
|
oct |
设置读写的整数为 八进制数
|
dec
|
设置读写的整数为十进制数 |
hex |
设置读写的整数为十六进制数
|
showbase
|
强制显示进制前缀,如十六进制(0x)、八进制(0)、二进制(0b) |
forcesign |
强制显示符号(+、-)
|
forcepoint
|
强制显示小数点
|
noshowbase | 强制不显示前缀 |
noforcesign | 强制不显示符号 |
uppercasebase
|
显示大写的进制前缀
|
lowercasebase
|
显示小些的进制前缀
|
uppercasebase | 用大写字母表示 |
lowercasebase | 用小些字母表示 |
fixed | 固定小数点表示 |
scientific | 科学计数法表示 |
left | 左对齐 |
right | 右对齐 |
center | 居中 |
endl | 换行 |
flush | 清除缓冲 |
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
void filefun();
};
#include "mainwindow.h"
#include <QFile>
#include <QtDebug>
#include <QDataStream>
#include <QDate>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
filefun ();
}
MainWindow::~MainWindow()
{
}
void MainWindow::filefun ()
{
/*将二进制数据写到数据流*/
QFile file("binary.dat");
file.open (QFile::WriteOnly | QFile::Truncate);
QDataStream out(&file); //将数据序列化
out << QString(tr("张卫东:")); //将字符串序列化
out << QDate::fromString ("1990/04/01", "yyyy/MM/dd"); //讲整数序列化
out << (qint32)25;
file.close ();
/*从文件中读取数据*/
file.setFileName ("binary.dat");
if(!file.open (QFile::ReadOnly))
{
qDebug() << "error" << endl;
return;
}
QDataStream in(&file);
QString name;
QDate birthday;
qint32 age;
in >> name >> birthday >> age; //将获取字符串和整数
qDebug() << name << birthday << age;
file.close ();
#include <QCoreApplication>
#include <QStringList>
#include <QDir>
#include <QDebug>
qint64 du(const QString &path)
{
QDir dir(path);
qint64 size = 0;
foreach(QFileInfo fileinfo, dir.entryInfoList (QDir::Files))
{
size += fileinfo.size ();
}
/*返回目录下所有条目组成的字符串链表*/
foreach(QString subdir, dir.entryList (QDir::Dirs | QDir::NoDotAndDotDot))
{
size += du(path + QDir::separator () + subdir);
}
char unit = 'B';
qint64 cursize = size;
if(cursize > 1024)
{
cursize /= 1024;
unit = 'K';
if(cursize > 1024)
{
cursize /= 1024;
unit = 'M';
if(cursize > 1024)
{
cursize /= 1024;
unit = 'G';
}
}
}
qDebug() << cursize << unit << "\t" << qPrintable(path) << endl;
return size;
}
/*
* arguments()返回命令行参数
*/
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QStringList args = a.arguments ();
QString path;
if(args.count () > 1)
{
path = args[1];
}
else
{
path = QDir::currentPath ();
}
qDebug() << path << endl;
du(path);
return a.exec ();
}
过滤方式 | 作用描述 |
QDir::Dirs | 按照过滤方式列出所有目录 |
QDir::AllDirs | 列出所有目录,不考虑过滤方式 |
QDir::Files |
只列出文件
|
QDir::Drives
|
列出磁盘驱动器(UNIX系统无效) |
QDir::NoSymLinks
|
不列出符号链接(对不支持符号链接的操作系统无效)
|
QDir::NoDotAndDotDot
|
不列出“.”和“..”
|
QDir::AllEntries
|
列出目录、文件和磁盘驱动器。相当于Dirs|Files|Drives
|
QDir::Readable
|
列出所有具有“读”属性的文件和目录
|
QDir::Writable
|
列出所有具有“写”属性的文件和目录
|
QDir::Executable | 列出所有具有“执行”属性的文件和目录 |
QDir::Modified
|
只列出被修改过的文件(UNIX系统生效) |
QDir:::Hidden | 列出隐藏文件(在UNIX系统下,隐藏文件的文件名以“.”开始) |
QDir::System
|
列出系统文件(在UNIX系统下只FIFO、套接字和设备文件)
|
QDir::CaseSensitive
|
文件系统如果区分文件名大小写,则按大小写方式进行过滤 |
排序方式 | 作用描述 |
QDir::Name | 按名称排序 |
QDir::Time
|
按时间排序(修改时间)
|
QDir::Size | 按文件大小排序 |
QDir::Type | 按文件类型排序 |
QDir::Unsorted | 不排序 |
QDir::DirsFirst |
目录优先排序
|
QDir::DirsLast
|
目录最后排序 |
QDir::Reversed | 反序 |
QDir::IgnoreCase | 忽略大小写方式排序 |
QDir::LocaleAware | 使用当前本地排序方式进行排序 |
#ifndef FILEVIEW
#define FILEVIEW
#include <QDialog>
#include <QLineEdit>
#include <QDir>
#include <QLineEdit>
#include <QListWidget>
#include <QListWidgetItem>
#include <QFileInfoList>
#include <QVBoxLayout>
class FileView : public QDialog
{
Q_OBJECT
public:
FileView(QWidget *parent = 0, Qt::WindowFlags f = 0);
~FileView();
void showFileInfoList(QFileInfoList list);
public slots:
void slotShow(QDir dir);
void slotDirShow(QListWidgetItem *item);
private:
QLineEdit *fileLineEdit;
QListWidget *fileListWidget;
QVBoxLayout *mainLayout;
};
#include "fileview.h"
#include <QStringList>
#include <QIcon>
FileView::FileView(QWidget *parent,Qt::WindowFlags f)
: QDialog(parent,f)
{
setWindowTitle (tr("File View"));
fileLineEdit = new QLineEdit(tr("/"));
fileListWidget = new QListWidget;
mainLayout = new QVBoxLayout(this);
mainLayout->addWidget (fileLineEdit);
mainLayout->addWidget (fileListWidget);
connect (fileLineEdit, SIGNAL(returnPressed()), this, SLOT(slotShow(QDir)));
connect (fileListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(slotDirShow(QListWidgetItem*)));
QString root = "/";
QDir rootDir(root);
QStringList string;
string << "*";
QFileInfoList list = rootDir.entryInfoList (string);
showFileInfoList(list);
}
FileView::~FileView ()
{
}
/*
* 显示dir下的所有文件
*/
void FileView::slotShow (QDir dir)
{
QStringList string;
string << "*";
QFileInfoList list = dir.entryInfoList (string, QDir::AllEntries, QDir::DirsFirst);
showFileInfoList (list);
}
/*
* 根据用户的选择显示下一级目录的所有文件
*/
void FileView::slotDirShow (QListWidgetItem *item)
{
QString str = item->text (); //将下一级的目录保存在str中
QDir dir; //定义一个QDir对象
dir.setPath (fileLineEdit->text ()); //设置QDir对象的路径为当前目录路径
dir.cd (str); //根据下一级目录名重新设置QDir对象的路径
fileLineEdit->setText (dir.absolutePath ());//刷新显示当前的目录路径
slotShow(dir); //显示当前目录下的所有文件
}
/*
* 用户可以双击浏览器中显示的目录进入下一级目录,或单击".."返回上一级目录,
* 顶部的编辑框显示当前所在的目录路径,列表中显示当前该目录下的所有文件
*
* for(unsigned int i = 0; i < list.count (); i++){...}:一次从QFilInfoList对象中取出所有项
* 按目录和文件两种方式加入列表控件中。
*/
void FileView::showFileInfoList (QFileInfoList list)
{
fileListWidget->clear (); //清空列表控件
for(unsigned int i = 0; i < list.count (); i++)
{
QFileInfo temFileInfo = list.at (i);
if(temFileInfo.isDir ())
{
QIcon icon("dir.png");
QString filename = temFileInfo.fileName ();
QListWidgetItem *temp = new QListWidgetItem(icon, filename);
fileListWidget->addItem (temp);
}
else if(temFileInfo.isFile ())
{
QIcon icon("file.png");
QString filename = temFileInfo.fileName ();
QListWidgetItem *temp = new QListWidgetItem(icon, filename);
fileListWidget->addItem (temp);
}
}
}
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QCheckBox>
class FileInfo : public QDialog
{
Q_OBJECT
public:
FileInfo(QWidget *parent = 0);
~FileInfo();
public slots:
void slotFile();
void slotGet();
private:
QLabel *fileNameLabel;
QLineEdit *fileNameLineEdit;
QPushButton *fileBtn;
QLabel *sizeLabel;
QLineEdit *sizeLineEdit;
QLabel *createTimeLabel;
QLineEdit *createTimeLineEdit;
QLabel *lastModfiledLabel;
QLineEdit *lastModFiledLineEdit;
QLabel *lastReadLabel;
QLineEdit *lastReadLineEdit;
QLabel *propertyLabel;
QCheckBox *isDirCheckBox;
QCheckBox *isFileCheckBox;
QCheckBox *isSymLinkCheckBox;
QCheckBox *isHiddenCheckBox;
QCheckBox *isReadableCheckBox;
QCheckBox *isWriteableCheckBox;
QCheckBox *isExecutableCheckBox;
QPushButton *getBtn;
};
#include "fileinfo.h"
#include <QGridLayout>
#include <QFileDialog>
#include <QDateTime>
FileInfo::FileInfo(QWidget *parent)
: QDialog(parent)
{
fileNameLabel = new QLabel(tr("文件名:"));
fileNameLineEdit = new QLineEdit;
fileBtn = new QPushButton(tr("文件"));
sizeLabel = new QLabel(tr("大小:"));
sizeLineEdit = new QLineEdit;
createTimeLabel = new QLabel(tr("创建时间:"));
createTimeLineEdit = new QLineEdit;
lastModfiledLabel = new QLabel(tr("最后修改时间:"));
lastModFiledLineEdit = new QLineEdit;
lastReadLabel = new QLabel(tr("最后访问时间"));
lastReadLineEdit = new QLineEdit;
propertyLabel = new QLabel(tr("属性:"));
isDirCheckBox = new QCheckBox(tr("目录"));
isFileCheckBox = new QCheckBox(tr("文件"));
isSymLinkCheckBox = new QCheckBox(tr("符号链接"));
isHiddenCheckBox = new QCheckBox(tr("隐藏"));
isReadableCheckBox = new QCheckBox(tr("读"));
isWriteableCheckBox = new QCheckBox(tr("写"));
isExecutableCheckBox = new QCheckBox(tr("执行"));
getBtn = new QPushButton(tr("获取文件信息"));
QGridLayout *gridLayout = new QGridLayout;
gridLayout->addWidget (fileNameLabel, 0, 0);
gridLayout->addWidget (fileNameLineEdit, 0, 1);
gridLayout->addWidget (fileBtn, 0, 2);
gridLayout->addWidget (sizeLabel, 1, 0);
gridLayout->addWidget (sizeLineEdit, 1, 1);
gridLayout->addWidget (createTimeLabel, 2, 0);
gridLayout->addWidget (createTimeLineEdit, 2, 1);
gridLayout->addWidget (lastModfiledLabel, 3, 0);
gridLayout->addWidget (lastModFiledLineEdit, 3, 1);
gridLayout->addWidget (lastReadLabel, 4, 0);
gridLayout->addWidget (lastReadLineEdit, 4, 1);
QHBoxLayout *layout1 = new QHBoxLayout;
layout1->addWidget (propertyLabel);
QHBoxLayout *layout2 = new QHBoxLayout;
layout2->addWidget (isDirCheckBox);
layout2->addWidget (isFileCheckBox);
layout2->addWidget (isSymLinkCheckBox);
layout2->addWidget (isHiddenCheckBox);
layout2->addWidget (isReadableCheckBox);
layout2->addWidget (isWriteableCheckBox);
layout2->addWidget (isExecutableCheckBox);
QHBoxLayout *layout3 = new QHBoxLayout;
layout3->addWidget (getBtn);
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->addLayout (gridLayout);
mainLayout->addLayout (layout1);
mainLayout->addLayout (layout2);
mainLayout->addLayout (layout3);
connect (fileBtn, SIGNAL(clicked(bool)), this, SLOT(slotFile()));
connect (getBtn, SIGNAL(clicked(bool)), this, SLOT(slotGet()));
}
FileInfo::~FileInfo()
{
}
void FileInfo::slotFile ()
{
QString fileName = QFileDialog::getOpenFileName (this, "打开", ",", "files(*)");
fileNameLineEdit->setText (fileName);
}
void FileInfo::slotGet ()
{
QString file = fileNameLineEdit->text ();
QFileInfo info(file);
qint64 size = info.size ();
QDateTime created = info.created ();
QDateTime lastModfiled = info.lastModified ();
QDateTime lastRead = info.lastRead ();
bool isDir = info.isDir ();
bool isFile = info.isFile ();
bool isSymLink = info.isSymLink ();
bool isHidden = info.isHidden ();
bool isReadable = info.isReadable ();
bool isWriteable = info.isWritable ();
bool isExecutable = info.isExecutable ();
sizeLineEdit->setText (QString::number (size));
createTimeLineEdit->setText (created.toString());
lastModFiledLineEdit->setText (lastModfiled.toString());
lastReadLineEdit->setText (lastRead.toString());
isDirCheckBox->setCheckState (isDir ? Qt::Checked : Qt::Unchecked);
isFileCheckBox->setCheckState(isFile ? Qt::Checked : Qt::Unchecked);
isSymLinkCheckBox->setCheckState(isSymLink ? Qt::Checked : Qt::Unchecked);
isHiddenCheckBox->setCheckState(isHidden ? Qt::Checked : Qt::Unchecked);
isReadableCheckBox->setCheckState(isReadable ? Qt::Checked : Qt::Unchecked);
isWriteableCheckBox->setCheckState(isWriteable ? Qt::Checked: Qt::Unchecked);
isExecutableCheckBox->setCheckState(isExecutable ? Qt::Checked : Qt::Unchecked);
}
Qt5文件及磁盘处理相关推荐
- 26.菊花厂员工泄密事件(Qt5文件及磁盘处理)--- OpenCV从零开始到图像(人脸 + 物体)识别系列
本文作者:小嗷 微信公众号:aoxiaoji 吹比QQ群:736854977 简书链接:https://www.jianshu.com/u/45da1fbce7d0 本信息都来源与网络公开内容.如有疑 ...
- 9. Qt5文件及磁盘处理
第 9 章 Qt5 文件及磁盘处理 Qt 提供了QFile 类用于进行文件操作.QFile 类提供了读写文件的接口,可以读写文本文件.二进制文件和Qt 的资源文件. 处理文本文件和二进制文件,可以使用 ...
- linux rm 不释放_Linux解决rm 删除大文件后 磁盘空间无法释放的问题
Linux解决rm 删除大文件后 磁盘空间无法释放的问题 在Linux中,当我们使用rm在linux上删除了大文件,但是如果有进程打开了这个大文件,却没有关闭这个文件的句柄,那么linux内核还是不会 ...
- Wsus存储更新文件的磁盘已满
存储更新文件的磁盘已满或出现故障如果在 WSUS 服务器上存储更新文件并且磁盘已满,则可能需要更改 WSUS 存储更新文件的位置.如果存储更新文件的磁盘出现故障并且替用磁盘使用新的驱动器号,也必须更改 ...
- 【错误记录】VMware 虚拟机报错 ( 向 VMWare 虚拟机中的 Ubuntu 系统拷贝文件时磁盘空间不足 ② | 删除交换空间 )
文章目录 一.报错信息 二.解决方案 一.报错信息 在 [错误记录]VMware 虚拟机报错 ( 向 VMWare 虚拟机中的 Ubuntu 系统拷贝文件时磁盘空间不足 ) 博客中 , 给出了解决方案 ...
- Ubuntu 查看文件以及磁盘空间大小管理
(1)查看文件大小 查看当前文件夹下所有文件大小(包括子文件夹) du -sh # du -h 15M ./package 16K ./.fontconfig 4.0K ...
- 文件碎片/磁盘碎片的一些知识
一.什么是磁盘碎片? 其实磁盘碎片应该称为文件碎片,是因为文件被分散保存到整个磁盘的不同地方,而不是连续地保存在磁盘连续的簇中形成的. 当应用程序所需的物理内存不足时,一般操作系统会在硬盘中产生临时交 ...
- linux oracle流复制文件,【学习笔记】Oracle ASM linux dd命令复制asm中文件 操作磁盘或者分区...
天萃荷净 使用dd复制asm中文件,随着数据库新版本的推广ASM肯定会越来越被重视,最近准备系统的学习下ASM,以备突发情况需要,这是asm深入学习笔记 1.查询ASM某个数据文件AU信息 SQL&g ...
- php 统计磁盘大小,PHP_PHP统计目录大小的自定义函数分享,计算文件、磁盘分区和目录的 - phpStudy...
PHP统计目录大小的自定义函数分享 计算文件.磁盘分区和目录的大小在各种应用程序中都是常见的任务.计算文件的大小可以通过前面介绍过的filesize()函数完成,统计磁盘大小也可以使用disk_fre ...
最新文章
- JSP学习笔记(五):日期处理、页面重定向、点击量统计、自动刷新和发送邮件...
- python爬虫教程视频-python爬虫(入门教程、视频教程)
- python 回归去掉共线性_以IPL数据集为例的线性回归技术概述
- python集合运算_python-集合及其运算
- J - 数据结构实验:哈希表
- python学习 第一篇 基础
- System Center 2012 R2 ——基础篇
- 强烈建议大家把 CBCentralManager.h 里面的代理方法全部看一遍(就是翻译一遍,别偷懒)。@file CBCentralManager.h...
- php.ini $ phphome,shell 脚本安装PHP扩展的简单方法
- 改写画质、突破性能, Unity 全面升级!
- 红帽取代 Oracle,接管 OpenJDK 8 和 OpenJDK 11 | 极客头条
- 做了十年的功能测试,下一步该晋升测试开发还是转行软件开发?
- 《移动平台开发实践》第2周作业
- 【肌电信号】基于带通滤波肌电信号处理含Matlab源码
- 传统KTV打入冷宫,全民K歌和唱吧谁是“K歌之王”?
- 网络编程——CS模型(总结)
- jQuery下载安装详细教程,jQuery入门必备
- Linux中RAID5搭建
- Java 岗面经:两年半经验,面 10 个公司,经 28 轮面试,拿 9 个 offer,涨麻了。
- Ternary weight networks
热门文章
- java 等待线程池结束_如何等待java线程池中所有任务完成
- 关于调制信号,载波信号和射频信号的理解
- JAVA整合阿里云ONS(RocketMQ)
- A Blockchain-Based Decentralized Federated Learning Framework with Committee Consensus
- Android System WebView老版本大全
- Python实现让视频自动打码,再也不怕出现少儿不宜的画面了
- 2020-10-22希腊字母发音对照表及其latex命令
- 一款牛逼的浏览器,功能强大到上天!
- a标签中可以放其他标签吗?
- SCI写作要点和结构