`
qimo601
  • 浏览: 3446440 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

【转】Qt之文件操作 QFile

    博客分类:
  • Qt
阅读更多

 

转载: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()返回真。

 

一行一行直接读取文件

 

    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;  
    }  
 

    使用QTextStream读取文件

 

    QFile file("/proc/modules");
     if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
         return;

     QTextStream in(&file);
     QString line = in.readLine();
     while (!line.isNull()) {
         process_line(line);
         line = in.readLine();
     }
 

     使用QTextStream写入文件

 

     QFile file("out.txt");
     if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
         return;

     QTextStream out(&file);
     out << "The magic number is: " << 49 << "\n";
 

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

 

  QFile file("/home/administrator/testdir/test.txt");  
    if(!file.open(QIODevice::ReadWrite | QIODevice::Text)) {  
        qDebug()<<"Can't open the file!"<<endl;  
    }  
    QTextStream stream(&file);  
    QString line_in;  
//    while( !stream.atEnd()){  
//        line_in = stream.readLine();  
//        qDebug() << line_in;  
//    }  
//    stream.seek(stream.pos());  
    stream.seek(file.size());//将当前读取文件指针移动到文件末尾  
    int count = 0;  
    while(count < 10){  
        stream << QObject::trUtf8("新建行:") <<++count<<"/n";  
    }  
    stream.seek(0);//将当前读取文件指针移动到文件开始  
    while( !stream.atEnd()){  
        line_in = stream.readLine();  
        qDebug() << line_in;  
    }  
 

 

 

3、QDir

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

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

 

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

     运行结果:

     

 

4、QFileInfo

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

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

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

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

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

 

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

 

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

 

     运行结果:

     

分享到:
评论

相关推荐

    【QT】 19 QFile文件读取/QFileInfo文件信息

    在实际开发中,结合QFile和QFileInfo,我们可以实现强大的文件操作功能。例如,创建一个简单的文本编辑器,用户可以打开、编辑和保存文件。在打开文件时,先用QFileInfo检查文件是否存在和是否可读;然后用QFile打开...

    Qt 基于QFile 读写ini文件(包含QFile读取行,修改行数据,删除行数据)

    在Qt框架中,QFile类是用于处理本地文件的...总之,Qt中的QFile类提供了底层的文件操作能力,通过它我们可以实现对ini文件的精细化控制,虽然相比QSettings增加了编写代码的工作量,但在特定情况下能提供更高的灵活性。

    QT实现HEX文件操作

    下面将详细讨论QT如何实现HEX文件操作,并结合提供的资源,如《HEX文件格式解析.pdf》和源码工程,探讨相关知识点。 首先,了解HEX文件格式至关重要。HEX文件包含一系列记录,每个记录由起始字符、地址字段、数据...

    QT 文件读取和写入

    ### QT中的文件读写操作 #### 1. 文件写入操作 在QT框架中,文件的写入操作通常涉及以下几个步骤: - **创建文件对象**:通过`QFile`类来创建一个文件对象。 - **打开文件**:调用`open`方法来打开文件,可以指定...

    Qt文件操作详解(创建、写入、删除、INI、XML文件等) - 左霖风的博客 - CSDN博客1

    在Qt框架中,进行文件操作是非常常见的任务,包括创建、写入、删除文件以及处理特定格式如INI和XML文件。以下是对这些操作的详细说明: 1. 创建文件夹: 要创建一个新的文件夹,可以使用`QDir`类。首先包含头文件`...

    Qt加锁操作、文件锁、生产消费锁GUI演示

    在本文中,我们将深入探讨如何在Qt环境中使用线程锁,包括文件锁和生产者-消费者锁,并结合Visual Studio 2019进行GUI编程。这些知识点对于理解多线程同步以及Qt GUI应用的开发至关重要。 首先,让我们从Qt中的线程...

    Qt基础开发之Qt文件操作类QFile读写文件的详细方法与实例及QDataStream的使用方法

    Qt文件操作类QFile简介 Qt中使用QFile类来操作文件的输入/输出。继承至QIODevice,QIODevice类是输入/输出设备的基类, 为设备提供了公共实现和抽象接口用于读写块数据。QIODevice又继承至QObject。 1、使用QFile类...

    QT的文件的读取,QFile的使用

    QT框架是Qt公司开发的一种跨平台的C++...总结,QT的QFile类为开发者提供了强大的文件操作功能,无论是简单的读写操作还是复杂的文件管理,QFile都能满足需求。理解并熟练运用QFile,是提升QT应用开发能力的重要一环。

    QT4.7_文件读写另存为操作

    使用QFileDialog 和 QFile 以及 TextEdit 实现的文本操作 这个界面实现的就是按一个BUTTON键打开文档,并且显示其内容到TextEdit上,按另一个BUTTON键则实现另存为功能,即把 TextEdit上的内容写到新建的或者已有的...

    QT开发-文件(所有)读取-转二进制

    在QT开发中,文件操作是一项基础且重要的任务。本文将深入探讨如何在QT环境中实现“文件所有内容的读取”并将其转化为二进制格式显示。这个功能对于开发者来说非常实用,因为它允许开发者查看和复制文件的二进制数据...

    基于QT的局域网文件传输

    总结来说,基于QT的局域网文件传输项目涉及了QT库的GUI设计、网络扫描、文件操作、网络通信(TCP/UDP)以及可能的多线程或异步编程技术。对于想要学习QT和网络编程的初学者,这个项目提供了丰富的实践机会,同时也为...

    Qt文件操作示例程序

    **Qt文件操作示例程序** Qt是一个跨平台的C++图形用户界面应用程序开发框架,它提供了丰富的API用于处理各种文件操作。在这个示例程序中,我们可能会看到如何在Qt中进行基本的文件读写、文件操作监控以及进度条的...

    Qt 文件拷贝带进度条显示

    此外,我们还需要`QFile`和`QDir`类来处理文件和目录的操作。 实现文件拷贝功能,我们可以创建一个子线程来执行实际的文件复制操作。在这个子线程中,我们将使用`QFile`的`copy()`方法,同时在主线程中更新进度条。...

    基于QT+Linux/Windows的简易文件管理器

    3. **文件操作**: QT提供QFile、QDir类来处理文件和目录。例如,使用QDir::mkdir()可以创建新目录,QFile::remove()用于删除文件,QFile::copy()和QFile::move()分别用于复制和移动文件。 4. **事件处理与信号槽...

    QT之打开文件对话框选择文件

    总的来说,QT中的文件对话框选择文件功能结合了`QFileDialog`, `QFile`, `QTextStream`和`QFileInfo`等类,提供了完整的文件选择和操作流程。理解并熟练运用这些工具,能够帮助开发者实现更加用户友好的界面和高效的...

    qt 删除文件中的指定行

    qt c++ 文件 删除一行 删除指定行 可以删除指定文件中的指定行

    Qt文件或文件夹拷贝

    总的来说,`Qt`库提供了强大的文件和文件夹操作能力,开发者可以根据需求灵活运用这些API,实现各种复杂的文件操作任务。在实际开发中,确保正确处理异常情况,如文件不存在、权限问题等,是保证代码健壮性的关键。...

    Qt实现文件拷贝

    Qt是一个跨平台的应用程序开发框架,它提供了丰富的API来处理文件操作和多线程编程,使得我们可以方便地实现高效的文件复制任务。 首先,我们需要了解Qt中的文件操作类。`QFile`是用于读写单个文件的基础类,而`...

    Qt 读取16进制的data文件

    在Qt中,我们可以使用`QUdpSocket`类来实现UDP通信,但具体操作超出了当前话题的范围。如果你需要了解这部分内容,建议查阅相关的Qt网络编程教程。 总结起来,Qt提供了一套强大且灵活的工具来处理文件和数据流,...

Global site tag (gtag.js) - Google Analytics