QFile和QTextStream

QFile和QTextStreamQFile类是一个操作文件的输入/输出设备。详情请见……#include<qfile.h>继承了QIODevice。所有成员函数的列表。公有成员QFile()QFile(const QString & name)~QFile()QStringname()constvoidsetName(const QString & name)typedef…

大家好,又见面了,我是你们的朋友全栈君。

QFile类是一个操作文件的输入/输出设备。详情请见……

#include <qfile.h>

继承了 QIODevice

所有成员函数的列表。

公有成员

  • QFile ()
  • QFile ( const QString & name )
  • ~QFile ()
  • QString
    name () const
  • void
    setName ( const QString & name )
  • typedef QCString (* 
    EncoderFn ) ( const QString & fileName )
  • typedef QString (* 
    DecoderFn ) ( const QCString & localfileName )
  • bool
    exists () const
  • bool
    remove ()
  • virtual bool
    open ( int m )
  • bool
    open ( int m, FILE * f )
  • bool
    open ( int m, int f )
  • virtual void
    close ()
  • virtual void
    flush ()
  • virtual Offset
    size () const
  • virtual Offset
    at () const
  • virtual bool
    at ( Offset pos )
  • virtual bool
    atEnd () const
  • virtual Q_LONG
    readBlock ( char * p, Q_ULONG len )
  • virtual Q_LONG
    readLine ( char * p, Q_ULONG maxlen )
  • Q_LONG
    readLine ( QString & s, Q_ULONG maxlen )
  • virtual int
    getch ()
  • virtual int
    putch ( int ch )
  • virtual int
    ungetch ( int ch )
  • int
    handle () const

静态公有成员

重要的继承成员


详细描述

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

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

文件名通常可以通过构造函数来传递,但也可以使用setName()来设置。你可以通过exists()来检查一个文件是否存在并且可以通过remove()来移去一个文件。

文件可以用open()来打开、用close()来关闭、用flush()来刷新。数据通常可以使用QDataStream或者QTextStream进行读写,但你也可以使用readBlock()和readLine()来读,使用writeBlock()来写。QFile也支持getch()、 ungetch()和putch()。

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

这里是一个使用QTextStream来一行一行地读取一个文本文件的代码段。它会把每一行带上一个行号打印出来。

    QStringList lines;
    QFile file( "file.txt" );
    if ( file.open( IO_ReadOnly ) ) {
        QTextStream stream( &file );
        QString line;
        int n = 1;
        while ( !stream.eof() ) {
            line = stream.readLine(); // 不包括“\n”的一行文本
            printf( "%3d: %s\n", n++, line.latin1() );
            lines += line;
        }
        file.close();
    }
  

写文本也很容易(假设我们有一个行的字符串列表要写):

    QFile file( "file.txt" );
    if ( file.open( IO_WriteOnly ) ) {
        QTextStream stream( &file );
        for ( QStringList::Iterator it = lines.begin(); it != lines.end(); ++it )
            stream << *it << "\n";
        file.close();
    }
  

QFileInfo类控制文件的详细信息,比如访问权限、文件日期和文件类型。

QDir类管理目录和文件名列表。

Qt使用Unicode文件名。如果你想在Unix系统上使用你自己的输入/输出,你可以使用encodeName()(和decodeName())来把文件名转换为本地编码。

也可以参考QDataStreamQTextStream输入/输出和网络


成员类型文档

QFile::DecoderFn

QFile::setDecodingFunction()使用。

QFile::EncoderFn

QFile::setEncodingFunction()使用。


成员函数文档

QFile::QFile ()

构造一个没有名称的QFile。

QFile::QFile ( const QString & name )

构造一个文件名为
name的QFile。

也可以参考setName()。

QFile::~QFile ()

析构QFile。调用
close()。

bool QFile::at ( Offset pos ) [虚]

设置文件索引到
pos。如果成功,返回真,否则返回假。

实例:

    QFile f( "data.bin" );
    f.open( IO_ReadOnly );                      // 索引设置为0
    f.at( 100 );                                // 设置索引为100
    f.at( f.at()+50 );                          // 设置索引为150
    f.at( f.size()-80 );                        // 设置索引为EOF之前的80
    f.close();
  

不带参数使用at()可以重新得到文件的位移。

警告:如果文件是使用IO_Append方式打开(open())的话,结果是未定义的。

也可以参考size()和open()。

QIODevice中重新实现的。

Offset QFile::at () const [虚]

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

返回文件中的位置。

也可以参考size()。

QIODevice中重新实现的。

bool QFile::atEnd () const [虚]

如果到达文件的末尾,返回真,否则返回假。

也可以参考size()。

QIODevice中重新实现的。

void QFile::close () [虚]

关闭一个打开的文件。

如果一个文件是使用一个存在的文件句柄打开的,那么它不是关闭的。如果这个存在的文件句柄是一个FILE*,这个文件被刷新。如果这个存在的文件句柄是一个int文件描述符,那么对这个文件将没有操作。

一些“在后面写的”文件系统也许会在关闭文件时报告一个未详细说明的错误。这些错误只表明在上一次打开(open())之后也许发生了一些错误。在这种情况下,status()会在关闭之后(close())报告IO_UnspecifiedError,否则是IO_Ok

也可以参考open()和flush()。

实例:application/application.cppchart/chartform_files.cpphelpviewer/helpwindow.cppmdi/application.cppqdir/qdir.cppqwerty/qwerty.cppxml/outliner/outlinetree.cpp

QIODevice中重新实现的。

QString QFile::decodeName ( const QCString & localFileName ) [静态]

这个将会使用
localFileName做与
QFile::encodeName()相反的操作。

也可以参考setDecodingFunction()。

QCString QFile::encodeName ( const QString & fileName ) [静态]

当你使用QFile时,在Qt中
QFileInfo
QDir访问文件系统,你可以使用Unicode文件名。在Unix上,这些文件名被转换为8位的编码。如果你想在Unix上使用你自己的文件输入/输出,你应该使用这个函数来转换文件名。在Windows NT上,Unicode文件名在文件系统中是直接被支持的并且这个函数应该避免使用。在Windows 95上,在这时候非Latin1的场所设置是不被支持的。

默认情况下,这个函数把fileName转换为本地的8位编码,这取决于用户的场所设置。对于用户选择的文件名这足够了。应用程序中的文件名硬编码只是需要使用7位ASCII文件名字符。

这种转换方案可以使用setEncodingFunction()来改变。如果你需要给用户一个存储文件名为utf-8等等情况下,这也许很有用,但是这些文件名可能在这之后对其它应用程序来说是不可识别的。

也可以参考decodeName()。

bool QFile::exists ( const QString & fileName ) [静态]

如果给定的文件
fileName存在,返回真,否则返回假。

实例:chart/chartform.cppdirview/dirview.cpphelpviewer/helpwindow.cpp

bool QFile::exists () const

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

如果这个文件存在,返回真,否则返回假。

也可以参考name()。

void QFile::flush () [虚]

刷新文件缓存到磁盘。

close()也刷新文件缓存。

QIODevice中重新实现的。

int QFile::getch () [虚]

从文件中读取一个单字节/字符。

返回所读的字节/字符,如果到达文件的末尾,返回-1。

也可以参考putch()和ungetch()。

QIODevice中重新实现的。

int QFile::handle () const

返回这个文件的文件句柄。

如果是一个小的正整数,可以用在像fdopen()和fcntl()这样的C库函数中,也可以用在QSocketNotifier中。

如果这个文件没有被打开或者存在错误,handle()返回-1。

也可以参考QSocketNotifier

QString QFile::name () const

返回由
setName()设置的名称。

也可以参考setName()和QFileInfo::fileName()。

bool QFile::open ( int m ) [虚]

使用
m模式和当前指定的文件名打开文件。如果成功,返回真,否则返回假。

模式参数m必须是下列标记的组合:

  • IO_Raw 指定直接的(非缓存的)文件访问。
  • IO_ReadOnly 以只读模式打开文件。
  • IO_WriteOnly 以只写模式(并且截短)打开文件。
  • IO_ReadWrite 以读/写模式打开文件,等于(IO_ReadOnly | IO_WriteOnly)
  • IO_Append 以附加的模式打开文件。当你想向日志文件写些东西时这个模式非常有用。文件索引被设置到文件末尾。注意如果你在附加模式中使用at()定位文件索引,结果将是为定义的。
  • IO_Truncate 截短文件。
  • IO_Translate 在MS-DOS、Windows和OS/2下对文本文件翻译回车和换行。

直接访问模式在输入/输出的块操作使用4千字节或更大的情况下使用最好。当每次读小量数据时,缓存访问工作的更好。

重要:当使用缓存的文件工作时,数据没有被立刻写到文件中。调用flush()可以确保数据被真正地写完。

警告:如果你有一个缓存文件以同时读写方式打开,你不要在一次输入操作之后立即输出,反之亦然。你必须在输入和输出操作之间调用flush()或者一次文件定位操作,比如seek(),否则缓存中可能会包含无用信息。

如果文件不存在并且指定IO_WriteOnlyIO_ReadWrite时,文件被创建。

实例:

    QFile f1( "/tmp/data.bin" );
    QFile f2( "readme.txt" );
    f1.open( IO_Raw | IO_ReadWrite | IO_Append );
    f2.open( IO_ReadOnly | IO_Translate );
  

也可以参考name()、 close()、isOpen()和flush()。

实例:action/application.cppapplication/application.cppchart/chartform_files.cpphelpviewer/helpwindow.cppqdir/qdir.cppqwerty/qwerty.cppxml/outliner/outlinetree.cpp

QIODevice中重新实现的。

bool QFile::open ( int m, FILE * f )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

使用m模式和一个存在的文件句柄f打开文件。如果成功,返回真,否则返回假。

实例:

    #include <stdio.h>

    void printError( const char* msg )
    {
        QFile f;
        f.open( IO_WriteOnly, stderr );
        f.writeBlock( msg, qstrlen(msg) );      // 写到标准错误输出(stderr)
        f.close();
    }
  

当使用这个函数打开一个QFile时,close()并不真正关闭这个文件,只是刷新它。

警告:如果f标准输入(stdin)标准输出(stdout)标准错误输出(stderr),你也许不能搜索。更详细的信息请看QIODevice::isSequentialAccess()。

也可以参考close()。

bool QFile::open ( int m, int f )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

使用m模式和一个存在的文件描述符f打开文件。如果成功,返回真,否则返回假。

当使用这个函数打开一个QFile时,close()并不真正关闭这个文件。

使用这个函数打开一个QFile时,它被自动设置为直接模式,这就意味着文件输入/输出函数是慢的。如果你需要更好的执行效率,请你试着使用其它打开函数。

警告:如果f是0(stdin)、1(stdout)或2(stderr)其中之一时,你也许不能搜索。size()被设置为INT_MAX(在limits.h文件中)。

也可以参考close()。

int QFile::putch ( int ch ) [虚]

写字符
ch到文件。

返回ch,或者如果发生错误,返回-1。

也可以参考getch()和ungetch()。

QIODevice中重新实现的。

QByteArray QIODevice::readAll () [虚]

这个方便的函数返回这个设备中的所有剩余数据。

Q_LONG QFile::readBlock ( char * p, Q_ULONG len ) [虚]

从这个文件中读取最多
maxlen字节到
p并且返回实际读取的字节数量。

如果发生严重错误,返回-1。

警告:当一个缓存文件为了读写而打开时,我们已经在使用一些C库时遇到了问题。如果在一个写操作后立即执行一个读操作,读缓存中就会包含无用信息。更可怕的是,一些无用信息被写到文件中。在readBlock()之前调用flush()就可以解决这个问题。

也可以参考writeBlock()。

实例:qwerty/qwerty.cpp

QIODevice中重新实现的。

Q_LONG QFile::readLine ( char * p, Q_ULONG maxlen ) [虚]

读一行文本。

从这个文本中读取最多maxlen字节或者行结束符到p,哪个先发生以哪个为准。返回实际读取的字节数量,或者如果发生错误,返回-1。换行将不会被省略。

这个函数只对缓存文件有效。避免在以IO_Raw标记方式打开的文件中使用readLine()。

也可以参考readBlock()和QTextStream::readLine()。

QIODevice中重新实现的。

Q_LONG QFile::readLine ( QString & s, Q_ULONG maxlen )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

读一行文本。

从这个文本中读取最多maxlen字节或者行结束符到字符串s,哪个先发生以哪个为准。返回实际读取的字节数量,或者如果发生错误,返回-1。换行将不会被省略。

这个函数只对缓存文件有效。避免在以IO_Raw标记方式打开的文件中使用readLine()。

注意这个字符串只能作为无格式的Latin1字节来读,不是Unicode。

也可以参考readBlock()和QTextStream::readLine()。

bool QFile::remove ()

移去当前指定文件名的文件。如果成功,返回真,否则返回假。

在文件被移去之前,它被关闭。

bool QFile::remove ( const QString & fileName ) [静态]

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

移去文件fileName。如果成功,返回真,否则返回假。

void QFile::setDecodingFunction ( DecoderFn f ) [静态]

设置8位文件名的译码函数位
f。默认使用本地指定的8位编码。

也可以参考encodeName()和decodeName()。

void QFile::setEncodingFunction ( EncoderFn f ) [静态]

设置Unicode文件名的编码函数为
f。默认使用本地指定的8位编码。

也可以参考encodeName()。

void QFile::setName ( const QString & name )

设置文件的名称为
name。这个名称可以不包含路径,也可以包含相对路径或者绝对路径。

如果文件已经被打开,不要调用这个函数。

如果文件名没有路径或者使用相对路径,这是使用的路径就是应用程序在调用open()的时候的当前路径。

实例:

     QFile f;
     QDir::setCurrent( "/tmp" );
     f.setName( "readme.txt" );
     QDir::setCurrent( "/home" );
     f.open( IO_ReadOnly );        // 在Unix下打开“/home/readme.txt”
  

注意Qt支持在所有的操作系统中使用目录分隔符“/”。

也可以参卡name()、QFileInfoQDir

Offset QFile::size () const [虚]

返回文件大小。

也可以参考at()。

实例:table/statistics/statistics.cpp

QIODevice中重新实现的。

int QFile::ungetch ( int ch ) [虚]

把字符ch放回到这个文件中并且如果索引位置不是零的话,减一。

这个函数正常地被调用就是“撤销”getch()操作。

返回ch,否则,如果发生错误,返回-1。

也可以参考getch()和putch()。


QIODevice中重新实现的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/138657.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 推荐一个比较好用的画廊展示图片(支持无限轮播)的控件ViewPagerGallery「建议收藏」

    推荐一个比较好用的画廊展示图片(支持无限轮播)的控件ViewPagerGallery「建议收藏」1.在此我们引用支持无限滑动的3D视觉的画廊效果、平面普通广告栏轮播这个例子中有可以运行的效果,大家可以下载下来先看一下,在我开始使用的时候,发现,想要调整pageitem中的间距,比较困难,并没有暴露方法出来。所以就要看一下源代码,发现,在不使用3D效果,即初始化:initBanner(urlList,false),没有什么问题,(这里说的3D效果,就是左右item要比正在显示的ite…

  • 状态模式state_迭代器模式

    状态模式state_迭代器模式状态模式 State动机模式定义实例结构要点总结笔记动机在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能不同.如何在运行时根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转换之间引入紧耦合模式定义允许一个对象在其内部状态改变时改变它的行为.从而使对象看起来似乎修改了其行为.从而使对象看起来似乎修改了其行为.从而使对象看起来似乎修改了其行为.实例朴素根据状态来执行下一步enum NetworkStat

  • js查询手机号码归属地[通俗易懂]

    js查询手机号码归属地[通俗易懂]js查询手机号码归属地

  • 【数据库】Mysql 常用命令

    【数据库】Mysql 常用命令【数据库】Mysql 常用命令

  • 图片批量重命名编号不带括号的_批量重命名不带括号

    图片批量重命名编号不带括号的_批量重命名不带括号如果你是一名摄影工作者,那么你的电脑里肯定会保存很多的图片,为了更好的整理和保存这些图片,比如一类主题的图片以相同文字命名并且编号,这样就方便以后查找了,解决办法有了,那么怎么给这么多图片命名并编号呢?必须是重命名的放大,这样可以一键修改文件名,但是这样修改后的图片名称虽然有编号,但是编号外面加了一层括号,比较难看,很多小伙伴不想要这个括号,所以今天小编就为大家详细介绍“图片批量重命名编号不要括号”的方法!需要用的工具软件:优速文件批量重命名工具软件下载地址:https://ww…

  • linux部署tomcat项目详细教程(安装linux到部署tomcat)

    linux部署tomcat项目详细教程(安装linux到部署tomcat)近来想要研究下linux,所以就搭了个linux系统来配置服务器玩玩。这里分了个目录,如果已经安装好虚拟机或者linux系统的小伙伴可以直接跳过前面的安装介绍,直接看部署。文章目录一、总步骤说明二、安装虚拟机三、创建linux系统一、总步骤说明下载需要的材料(该博客有提供),这里我用到的主要有1)虚拟机Vmware,2)linux镜像文件CentOS-6.5-x86_64-bin-DVD1.iso3)服务器apache-tomcat-7.0.105.tar.gz4)jdk7u79linuxx

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号