Qt之文件操作 QFile

原地址:http://blog.csdn.net/liuhongwei123888/article/details/6084761

今天学习QT的文件操作

1、QIODevice
直接继承自QObject

QIODevice类是输入/输出设备的基类。

QIODevice为设备提供了公共实现和抽象接口用于读写块数据。
QIODevice是一个抽象类,不能被实例化。

被Q3Socket,Q3SocketDevice,QAbstractSocket,QBuffer,QFile,QLocalSocket,QNetworkReply,QProcess继承.

===============================================================================================

2、QFile

继承自QIODevice

QFile类是一个操作文件的输入/输出设备。

QFile是用来读写二进制文件和文本文件的输入/输出设备。QFile可以自己单独被使用,但是如果和QDataStream或QTextStream一起使用将更加方便。

文件名通常可以通过构造函数来传递,但也可以使用setName()来设置。目录分隔符在任何操作系统下都使用“/",“/"不被支持。你可以通过exists()来检查一个文件是否存在并且可以通过remove()来移去一个文件。更多操作系统相关的高级文件系统操作QT提供了QFileInfo和QDir类.

文件可以用open()来打开、用close()来关闭、用flush()来刷新。数据通常可以使用QDataStream或者QTextStream进行读写,但你也可以使用read(),readLine(),readAll(),write()读写。QFile也支持getChar(),putChar(),和ungetChar()

size()可以返回文件的大小。你可以通过使用pos()函数得到当前文件位置或者使用seek()移到一个新的文件位置。如果你到了文件的末尾,atEnd()返回真。

一行一行直接读取文件

Cpp代码  

  1. QFile file("/home/administrator/testdir/test.txt");
  2. if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
  3. qDebug()<<"Can‘t open the file!"<<endl;
  4. }
  5. while(!file.atEnd()) {
  6. QByteArray line = file.readLine();
  7. QString str(line);
  8. qDebug()<< str;
  9. }

使用QTextStream读取文件

Cpp代码  

  1. QFile file("/proc/modules");
  2. if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
  3. return;
  4. QTextStream in(&file);
  5. QString line = in.readLine();
  6. while (!line.isNull()) {
  7. process_line(line);
  8. line = in.readLine();
  9. }

使用QTextStream写入文件

Cpp代码  

  1. QFile file("out.txt");
  2. if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
  3. return;
  4. QTextStream out(&file);
  5. out << "The magic number is: " << 49 << "\n";

QDataStream 重载了运算符了"<<"写数据,>>读数据

Cpp代码  

  1. QFile file("/home/administrator/testdir/test.txt");
  2. if(!file.open(QIODevice::ReadWrite | QIODevice::Text)) {
  3. qDebug()<<"Can‘t open the file!"<<endl;
  4. }
  5. QTextStream stream(&file);
  6. QString line_in;
  7. //    while( !stream.atEnd()){
  8. //        line_in = stream.readLine();
  9. //        qDebug() << line_in;
  10. //    }
  11. //    stream.seek(stream.pos());
  12. stream.seek(file.size());//将当前读取文件指针移动到文件末尾
  13. int count = 0;
  14. while(count < 10){
  15. stream << QObject::trUtf8("新建行:") <<++count<<"/n";
  16. }
  17. stream.seek(0);//将当前读取文件指针移动到文件开始
  18. while( !stream.atEnd()){
  19. line_in = stream.readLine();
  20. qDebug() << line_in;
  21. }

3、QDir

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

QDir类提供了访问目录结构和它们的内容的与平台无关的方式。 
     QDir用来操作路径名称、关于路径和文件的访问信息和操作底层文件系统。 
     QDir使用相对或绝对文件路径来指向一个文件。绝对路径是从目录分隔符“/”或者带有一个驱动器标识(除了在Unix下)。如果你总是使用“/”作为目录分隔符,Qt将会把你的路径转化为符合底层的操作系统的。相对文件名是由一个目录名称或者文件名开始并且指定一个相对于当前路径的路径。 
例如绝对路径:
     QDir("/home/administrator/soft");
     QDir("D:/software");
     我们可以使用isRelative()或isAbsolute()函数确认QDir是用的相对路径还是绝对路径。使用makeAbsolute()来转换相对路径的QDir转换成绝对路径的QDir.

Cpp代码  

  1. QDir d("D:/");
  2. d.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks | QDir::AllDirs);//列出文件,列出隐藏文件(在Unix下就是以.开始的为文件),不列出符号链接(不支持符号连接的操作系统会忽略)
  3. d.setSorting(QDir::Size | QDir::Reversed);//按文件大小排序,相反的排序顺序
  4. const QFileInfoList list = d.entryInfoList();//返回这个目录中所有目录和文件的QFileInfo对象的列表
  5. QFileInfoList::const_iterator iterator = list.begin();
  6. qDebug() << "目录和文件的数量: " << d.count();//返回找到的目录和文件的数量
  7. qDebug() << "fileName/t/t/tsize/t/t/t";
  8. while(iterator != list.end()){
  9. qDebug() << (*iterator).fileName()<<"/t/t/t"<<(*iterator).size();
  10. iterator++;
  11. }
  12. qDebug() << "当前目录: " << d.current();//返回应用程序当前目录。
  13. qDebug() << "当前目录的绝对路径" << d.currentPath();//返回应用程序当前目录的绝对路径。
  14. //    const QList<QString> list = d.entryList(); //返回这个目录中所有目录和文件的名称的列表
  15. //    QList<QString>::const_iterator iterator = list.begin();
  16. //    while(iterator != list.end()){
  17. //        qDebug() << (*iterator);
  18. //        iterator++;
  19. //    }

运行结果:

4、QFileInfo

QFileInfo类提供了一个与平台无关的文件信息.

QFileInfo提供了关于系统中的文件名称和位置,访问权限和是否是符号链接,文件大小和上次修改/读写时间等,也能被用于Qt资源文件。

QFileInfo能通过相对/绝对路径指向一个文件。

可以使用isFile(),isDir(),isSymLink().symLinkTarget()函数提供符号链接的目标文件。

在Unix(包括Mac OS X)的符号链接具有与目标文件相同的大小(),因为Unix透明地处理符号链接;同样,打开一个符号连接使用的QFile有效地打开链接的目标.

Windows中,符号链接(快捷方式)的lnk文件。它大小()的是,符号链接(而不是链接的目标)的大小,打开一个符号连接使用的QFile并打开。lnk文件。例如

Cpp代码  

  1. #include <QtCore/QCoreApplication>
  2. #include <QFileInfo>
  3. #include <QDebug>
  4. int main(int argc, char *argv[])
  5. {
  6. QCoreApplication a(argc, argv);
  7. QFileInfo info1("E:/meego/vi_command.lnk");
  8. qDebug() << info1.isSymLink();
  9. qDebug() << info1.absoluteFilePath();
  10. qDebug() << info1.size();
  11. qDebug() << info1.symLinkTarget();
  12. qDebug() << "**********************";
  13. QFileInfo info2(info1.symLinkTarget());
  14. qDebug() << info2.isSymLink();
  15. qDebug() << info2.absoluteFilePath();
  16. qDebug() << info2.size();
  17. return a.exec();
  18. }

运行结果:

[cpp] view plaincopy

  1. #include <QtCore/QCoreApplication>
  2. #include <QFileInfo>
  3. #include <QDebug>
  4. #include <QTextCodec>
  5. int main(int argc, char *argv[])
  6. {
  7. QCoreApplication a(argc, argv);
  8. QTextCodec *codec = QTextCodec::codecForName("GB2312");
  9. QTextCodec::setCodecForLocale(codec);
  10. QTextCodec::setCodecForCStrings(codec);
  11. QTextCodec::setCodecForTr(codec);
  12. QFileInfo info("E:/meego/基本命令与VI.Command.txt");
  13. qDebug() << info.baseName();//不包括后缀名
  14. qDebug() << info.bundleName();//只有在Mac OS才有用,其它平台为空字符串
  15. qDebug() << info.suffix();//后缀名
  16. qDebug() << info.completeBaseName();//不包括后缀名
  17. qDebug() << info.completeSuffix();//完整的后缀名
  18. return a.exec();
  19. }

运行结果:

Qt之文件操作 QFile

时间: 2024-10-14 13:59:43

Qt之文件操作 QFile的相关文章

文件操作QFile和QDataStream

一.QFlie文件读写 #include<QFile> #include<QFileDialog>//文件对话框1.读文件 1 QString path = QFileDialog::getOpenFileName(this,//指定父对象 2 "open", "../", "TXT(*.txt)");//对话框的名字 路径 3 if(!path.isEmpty()) 4 { 5 QFile file(path);//创建

【QT】文件读写操作

读取输出: QFile file("D:/Englishpath/QTprojects/1.dat"); if(!file.open(QIODevice::ReadOnly)) { qDebug()<<"Can't open the file!"<<endl; } QTextStream in(&file); while( !in.atEnd()) { QString line = in.readLine(); qDebug() &l

QT开发(二十四)——QT文件操作

QT开发(二十四)--QT文件操作 一.QT文件操作简介 QT中的IO操作通过统一的接口简化了文件与外部设备的操作方式,QT中文件被当作一种特殊的外部设备,文件操作与外部设备操作相同. 1.IO操作的主要函数接口 打开设备:bool open(OpenMode mode) 读取数据:QByteArray read(qint64 maxSize) 写入数据:qint64 write(const QByteArray & byteArray) 关闭设备:void close() IO操作的本质是连续

第三十二课、Qt中的文件操作

一.Qt中的IO操作 1.Qt中IO操作的处理方式 (1).Qt通过统一的接口简化了文件与外部设备的操作方式 (2).Qt中的文件被看做是一种特殊的外部设备 (3).Qt中的文件操作与外部设备操作相同 2.IO操作中的关键函数接口 注意:IO操作的本质:连续存储空间的数据读写 3.Qt中IO设备类型 (1).顺序存储设备:只能从头开始顺序读写数据,不能指定数据的读写位置(串口) (2).随机存储设备:可以定位到任意位置进行数据读写(seek function函数)(文件) 4.Qt中IO设备 的

第32课 Qt中的文件操作

1. Qt的中IO操作 (1)Qt中IO操作的处理方式 ①Qt通过统一的接口简化了文件和外部设备的操作方式 ②Qt中的文件被看作一种特殊的外部设备 ③Qt中的文件操作与外部设备的操作相同 (2)IO操作中的关键函数接口——IO操作的本质:连续存储空间的数据读写 ①打开设备:bool open(OpenMode mode); ②读取数据:QByteArray read(qint64 maxSize); ③写入数据:qint64 write(const QByteArray& byteArray);

Qt之课外实践——文件操作(简单清道夫)

说明:这个小项目是关于文件操作的.主要的功能有:重复文件的查找(根据文件的大小),说白了,就是讲大小相同的文件在一起显示出来,供用户自由的选择删除.这个360云盘里的文件去重还差的很远.还有空文件夹的查找(我们的思想是:如果一个目录下面只有.和..2个目录,则,这个文件夹就是空的.但是我们不包含文件里面套有空文件夹.),以及垃圾文件的查找(根据文件的后缀,简单判断的.). 窗体主界面: 首先程序运行前,会弹出提示对话框. 代码如下: mainwindow.h #ifndef MAINWINDOW

Qt--软件开发流程简介、Qt中的文件操作

一.软件开发流程 Q.什么是软件开发流程?1.通过一系列步骤保证软件的顺利完成2.软件产品在生命期内的管理方法学软件开发流程的本质1.开发流程与具体技术无关2.开发流程是开发团队必须遵守的规则常见的开发流程--即兴.瀑布.增量.螺旋.敏捷等A.即兴模型1.与最终用户交流后立即开始进行开发2.没有需求分析和需求发掘的过程3.没有整体设计以及规划的过程4.没有相关软件文档,维护性差B.瀑布模型1.通过自上而下的步骤进行软件开发2.每个开发步骤都是不可逆的C.增量模型1.将系统能分解为互不重叠的子功能

【大话QT之五】Windows与Linux下文件操作监控的实现

一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场上网盘实现有一些的不同,主要在客户端与服务器端的操作需要双向进行,即:用户在客户端的操作需要及时同步到服务器端:在服务器端作业渲染生成的文件要及时同步到客户端.即:用户不在需要单独的下载数据,而是在作业运行的同时,渲染就过就会自动同步到客户端,大大缩短了等待时间.当然,无论是在客户端还是在服务端都面

qt ui程序使用Linux的文件操作open、close (转)

原文地址:qt ui程序使用Linux的文件操作open.close 作者:kjpioo 提出这个问题是因为在qt的QWidget类型的对象中,close()函数会和QWidget::close()冲突,如果在类函数实现时直接用close(),在程序编译时会提示提示错误(具体什么错误不记得了). 错误原因是QWidget::close()与stdio.h中的文件关闭标准函数close()产生了歧义.所以可以参考下文链接中的解决方案. http://bytes.com/topic/c/answer