文件普通读写
QFile file("in.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
while (!file.atEnd()) {
file.read(buf, size);
process_line(buf);
}
file.close();
流式操作
QFile file("in.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine();
process_line(line);
}
在Qt中,文件的普通读写和流式操作是两种不同的文件操作方式。
普通读写是通过使用QFile类进行文件的读写操作。它提供了一系列的方法,如open()、read()、write()等,可以直接对文件进行读写操作。普通读写的好处是简单直接,适合于对文件进行一次性的读写操作。
流式操作是通过使用QDataStream类进行文件的读写操作。它提供了一种序列化的方式来读写数据,可以方便地对不同类型的数据进行读写。流式操作的好处是可以方便地进行数据的序列化和反序列化操作,适合于对复杂数据结构进行读写操作。
总结起来,普通读写适合于简单的文件读写操作,而流式操作适合于复杂数据结构的读写操作。使用普通读写可以更直观地进行文件读写,而使用流式操作可以更方便地进行数据的序列化和反序列化。
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTextEdit>
#include <QLineEdit>
#include <QPushButton>
#include <QFileDialog>
#include <QTextStream>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
public slots:
void showfile()
{
QString filename = QFileDialog::getOpenFileName();
le->setText(filename);
#if 0
QFile file(filename);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
while (!file.atEnd()) {//两种实现方式 效果一样,
QByteArray line = file.readLine();
// process_line(line);
te->append(line);
}
#endif
QFile file(filename);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream in(&file);//将文件交给流
while (!in.atEnd()) {
QString line = in.readLine();
// process_line(line);
te->append(line);//追加
}
}
private:
QTextEdit *te;
QLineEdit *le;
QPushButton *pb;
};
#endif // WIDGET_H
#include "widget.h"
#include <QVBoxLayout>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
te = new QTextEdit;
te->setMinimumSize(640, 480);
le = new QLineEdit;
pb = new QPushButton("showtxt");
QVBoxLayout *vbox = new QVBoxLayout;//垂直布局
vbox->addWidget(te);
vbox->addWidget(le);
vbox->addWidget(pb);
setLayout(vbox);
connect(pb, SIGNAL(clicked(bool)), this, SLOT(showfile()));
}
Widget::~Widget()
{
}
文件属性
QFileInfo info1("/home/bob/bin/untabify");
info1.isSymLink(); // returns true
info1.absoluteFilePath(); // returns "/home/bob/bin/untabify" info1.size(); // returns 56201
info1.symLinkTarget(); // returns "/opt/pretty++/bin/untabify"
文件夹遍历
QDir dir;
QFileInfoList list = dir.entryInfoList();
for (int i = 0; i < list.size(); ++i) {
QFileInfo fileInfo = list.at(i);
}
想读取文件夹属性,新建文件可以使用QT console Application这个新建项目
#include <QCoreApplication>
#include <QDir>
#include <QFileInfo>
#include <iostream>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QDir dir;
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 << fileInfo.size()<< "\t"<<fileInfo.fileName().toStdString().c_str();
std::cout << std::endl;
}
return a.exec();
}