Home · All Classes · Modules  · QSS HELP  · QSS 案例 · VER007 HOME

QFile Class Reference
[QtCore module]

QFile类提供了读取和写入文件的接口。More...

继承QIODevice

通过继承QTemporaryFile

Types

Methods

Static Methods


Detailed Description

QFile类提供了读取和写入文件的接口。

的QFile是用于读取和写入文本文件和二进制文件的I / O设备和resources。一个QFile时可能会或单独使用,更方便,用QTextStream or QDataStream

文件名通常是通过在构造函数,但它可以被设置在任何时候使用setFileName( ) 。 QFile时预计,文件分隔符是' /' ,无论操作系统。不支持使用其他分隔符(比如,' \ ')的。

您可以检查一个文件是否存在使用exists( ) ,并删除使用文件remove( ) 。通过提供(更先进的文件系统相关的操作QFileInfoQDir。 )

该文件被打开open( ) ,关闭了与close( ) ,并用冲洗flush( ) 。数据通常是读取和写入使用QDataStream or QTextStream,但你也可以致电QIODevice继承功能read( )readLine( )readAll( )write( ) 。 QFile时也继承getChar( )putChar()和ungetChar(),它在工作时一个字符。

该文件的大小是由返回size( ) 。您可以使用获取当前文件位置pos( ) ,或者移动到使用新的文件位置seek( ) 。如果你已经达到了文件的末尾,atEnd( )返回True 。

Reading Files Directly

下面的例子逐行读取文本文件中的行:

     QFile file("in.txt");
     if (!file.open(QIODevice.ReadOnly | QIODevice.Text))
         return;

     while (!file.atEnd()) {
         QByteArray line = file.readLine();
         process_line(line);
     }

QIODevice.Text标志传递给open( )告诉Qt转换的Windows风格的行结束符( “ \ r \ n ” )为C + +风格的终结符( “\ N” ) 。默认情况下, QFile时假定二进制,即它不存储在文件中的字节执行任何转换。

Using Streams to Read Files

下面的示例使用QTextStream按行读取文本文件中的行:

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

QTextStream需要将存储在磁盘上的8位数据转换成16位的Unicode的护理QString。默认情况下,它假定用户系统的本地8位编码被使用(例如, ISO 8859-1欧洲大部分地区;见QTextCodec.codecForLocale( )了解详情) 。这可以通过使用setCodec ( )来改变。

写文字,我们可以使用操作符\u003c\u003c ( ) ,这是重载采取QTextStream在左侧和各种数据类型(包括QString)右侧:

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

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

QDataStream是相似的,你可以使用操作符\u003c\u003c ()写数据和操作员\u003e\u003e ()来读取它。请参阅类文档。

当您使用QFile时,QFileInfoQDir访问与Qt的文件系统,可以使用Unicode文件名。在Unix上,这些文件名转换为8位编码。如果你想使用标准C + +的API (<cstdio> or <iostream>)或特定于平台的API来访问文件,而不是QFile时,您可以使用encodeName()和decodeName( )函数来Unicode文件名和8位文件名之间转换。

在Unix中,有一些特殊的系统文件(例如,在/proc)索取size( )将总是返回0 ,但你仍然可以从这样一个文件中读取更多的数据,该数据被直接回应你的呼唤​​产生read( ) 。在这种情况下,但是,你不能使用atEnd() ,以确定是否有更多的数据读取(自atEnd( )将返回True ,声称有大小为0的文件) 。相反,你应该调用readAll( ) ,或致电read()或readLine( )直到没有更多的数据可以被读取。下面的示例使用QTextStream to read /proc/modules一行一行:

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

Signals

不像其他的QIODevice实现方式中,如QTcpSocket, QFile时不发出aboutToClose( )bytesWritten() ,或readyRead( )信号。这实现细节意味着的QFile是不适合读,写某些类型的文件,比如在Unix平台上的设备文件。

Platform Specific Issues

文件权限在Linux / Mac的OS X和Windows不同的处理。在一个非writable在Linux目录,不能创建文件。这并不总是在Windows上,在那里,比如, “我的文档”目录通常是不可写的,但它还是有可能在其中创建文件的情况下。


Type Documentation

QFile.FileError

该枚举描述了可以通过返回的错误error()函数。

Constant Value Description
QFile.NoError 0 未发生错误。
QFile.ReadError 1 从文件中读取数据时发生错误。
QFile.WriteError 2 写入文件时发生错误。
QFile.FatalError 3 发生致命错误。
QFile.ResourceError 4  
QFile.OpenError 5 该文件无法打开。
QFile.AbortError 6 该操作被中止。
QFile.TimeOutError 7 发生超时。
QFile.UnspecifiedError 8 发生未指定的错误。
QFile.RemoveError 9 该文件不能被删除。
QFile.RenameError 10 该文件无法重命名。
QFile.PositionError 11 在文件中的位置不能改变。
QFile.ResizeError 12 该文件不能被调整大小。
QFile.PermissionsError 13 该文件无法访问。
QFile.CopyError 14 该文件不能被复制。

QFile.FileHandleFlag

打开一个文件来指定仅适用于文件,而不是一个通用的附加选项时,此枚举使用QIODevice

Constant Value Description
QFile.AutoCloseHandle 0x0001 传入的文件句柄open( )应当由被关闭close( ) ,默认的行为是密切刚刚刷新的文件和应用程序负责关闭文件句柄。当打开一个文件的名字,这个标志被忽略,因为Qt的总是“拥有”的文件句柄,并且必须关闭它。
QFile.DontCloseHandle 0 传入的文件句柄open()将不会被Qt封闭。该应用程序必须确保close()被调用。

这个枚举被引入或修改的Qt 4.8 。

该FileHandleFlags类型是一个typedef为QFlags\u003cFileHandleFlag\u003e 。它存储FileHandleFlag值的或组合。

QFile.MemoryMapFlags

该枚举描述了可以使用的特殊选项map()函数。

Constant Value Description
QFile.NoOptions 0 没有选项。

这个枚举被引入或修改的Qt 4.4 。

QFile.Permission

此枚举所使用的许可( )函数来报告的权限和文件的所有权。该值可以是或的结果一起测试多个权限和所有权值。

Constant Value Description
QFile.ReadOwner 0x4000 该文件是由文件的所有者可读。
QFile.WriteOwner 0x2000 该文件是可写的文件的所有者。
QFile.ExeOwner 0x1000 该文件是由文件的所有者可执行文件。
QFile.ReadUser 0x0400 该文件是由用户可读。
QFile.WriteUser 0x0200 该文件是可写的用户。
QFile.ExeUser 0x0100 该文件是可执行的用户。
QFile.ReadGroup 0x0040 该文件是由组读取。
QFile.WriteGroup 0x0020 该文件是可写的组。
QFile.ExeGroup 0x0010 该文件是由集团的可执行文件。
QFile.ReadOther 0x0004 该文件可以被任何人读取。
QFile.WriteOther 0x0002 该文件是可写的权限。
QFile.ExeOther 0x0001 该文件是由人执行。

Warning:因为在Qt所支持的平台不同, ReadUser , WriteUser和ExeUser的语义是与平台相关的:在Unix上,返回该文件的所有者的权利和Windows是返回当前用户的权限。这种行为可能会改变在未来的Qt版本。

注意Qt默认不检查NTFS文件系统权限,因为这可能会降低文件处理相当的性能。它可以强制许可通过在源下面的代码检查在NTFS :

 extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;

权限检查,然后开启和关闭由递增和递减qt_ntfs_permission_lookup通过1 。

 qt_ntfs_permission_lookup++; // turn checking on
 qt_ntfs_permission_lookup--; // turn it off again

权限类型是一个typedef为QFlags\u003cPermission\u003e 。它存储权限值的或组合。


Method Documentation

QFile.__init__ (self)

构造一个新的文件对象来表示文件给定的name

QFile.__init__ (self, QString name)

QFile.__init__ (self, QObject parent)

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

构造一个新的文件对象与给定parent

QFile.__init__ (self, QString name, QObject parent)

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

构造一个新的文件对象与给定parent来表示该文件具有指定的name

bool QFile.atEnd (self)

从重新实现QIODevice.atEnd( ) 。

返回True如果文件的末尾已经达到,否则返回False 。

对于UNIX上的(例如那些在常规空文件/proc) ,这个函数返回True ,因为文件系统报告,这样的文件的大小为0 。因此,您不应该依赖于了atEnd ()从这些文件中读取数据时,而是调用read(),直到没有更多的数据可以被读取。

QFile.close (self)

从重新实现QIODevice.close( ) 。

电话QFile.flush()和关闭该文件。从齐平的错误被忽略。

See also QIODevice.close( ) 。

bool QFile.copy (self, QString newName)

目前由指定将文件复制fileName( )到一个名为newName。成功返回True ,否则返回False 。

请注意,如果有名称的文件newName已经存在,复制( )返回FALSE(即QFile不会复盖它)。

源文件被关闭之前,它被复制。

See also setFileName( ) 。

bool QFile.copy (QString fileName, QString newName)

这是一个重载函数。

复制文件fileNamenewName。成功返回True ,否则返回False 。

如果有名称的文件newName已经存在,则copy( )返回False (即,QFile不会复盖它)。

See also rename( ) 。

QString QFile.decodeName (QByteArray localFileName)

这样做的逆QFile.encodeName( )使用localFileName

See also setDecodingFunction()和encodeName( ) 。

QString QFile.decodeName (str localFileName)

这是一个重载函数。

返回Unicode版本的给定localFileName。看encodeName( )了解详情。

QByteArray QFile.encodeName (QString fileName)

默认情况下,此功能将fileName通过用户的语言环境来确定本地8位编码。这足以让用户选择的文件名。文件名硬编码到应用程序中应该只使用7位ASCII字符的文件名。

See also decodeName()和setEncodingFunction( ) 。

FileError QFile.error (self)

返回文件的错误状态。

在I / O设备的状态返回一个错误代码。例如,如果open( )返回False ,或读/写操作返回-1 ,该函数可以被调用来找出原因操作失败的原因。

See also unsetError( ) 。

bool QFile.exists (self)

返回True如果指定的文件fileName存在,否则返回False 。

bool QFile.exists (QString fileName)

这是一个重载函数。

返回True如果指定的文件fileName( )存在,否则返回False 。

See also fileName()和setFileName( ) 。

QAbstractFileEngine QFile.fileEngine (self)

QString QFile.fileName (self)

返回名称按设定setFileName( )或向QFile构造函数。

See also setFileName()和QFileInfo.fileName( ) 。

bool QFile.flush (self)

刷新所有缓冲的数据文件。成功返回True ,否则返回False 。

int QFile.handle (self)

返回文件的文件句柄。

这是一个小的正整数,适合与C库函数,如fdopen ( )和fcntl ( )的使用。在使用文件描述符的套接字(即Unix系统,而不是Windows)中的句柄可以被使用的系统QSocketNotifier为好。

如果文件没有打开,或者有错误,手柄( )返回-1 。

此功能不支持Windows CE 。

在Symbian ,这个函数返回-1,如果该文件被正常开启,为基于Symbian操作系统的文件句柄不适合在一个int ,并与该手柄将用于C库函数不兼容。如果文件是使用采取开放的C库文件句柄/文件描述符重载打开,那么这个函数返回相同的句柄。

See also QSocketNotifier

bool QFile.isSequential (self)

从重新实现QIODevice.isSequential( ) 。

返回True如果该文件只能按顺序操作,否则返回False 。

大多数文件支持随机访问,但一些特殊的文件可能不会。

See also QIODevice.isSequential( ) 。

bool QFile.link (self, QString newName)

创建一个名为链接linkName指向当前所指定的文件fileName( ) 。什么链接是依赖于底层的文件系统(无论是在Windows还是Unix上符号链接的快捷方式)上。成功返回True ,否则返回False 。

此功能不会复盖已经存在的实体在文件系统中,在这种情况下,link()将返回False ,并设置error() to return RenameError

Note:要创建在Windows上的有效链接,linkName必须有一个.lnk文件扩展名。

Note:Symbian的文件系统不支持链接。

See also setFileName( ) 。

bool QFile.link (QString oldname, QString newName)

这是一个重载函数。

创建一个名为链接linkName指向该文件fileName。什么链接是依赖于底层的文件系统(无论是在Windows还是Unix上符号链接的快捷方式)上。成功返回True ,否则返回False 。

See also link( ) 。

sip.voidptr QFile.map (self, int offset, int size, MemoryMapFlags flags = QFile.NoOptions)

地图size该文件的字节到存储器中,起始offset。一个文件应该是开放的地图成功,但该文件并不需要保持开放的内存被映射后。当QFile被破坏或一个新的文件打开与该对象,还没有被映射任何地图将自动被取消映射。

任何映射选项可以通过传递flags

返回一个指针,该存储器或0,如果存在错误。

Note:在Windows CE 5.0的映射发生前的文件将被关闭。

此功能被引入Qt的4.4 。

See also unmap()和QAbstractFileEngine.supportsExtension( ) 。

bool QFile.open (self, QIODevice.OpenMode flags)

从重新实现QIODevice.open( ) 。

打开使用文件OpenMode mode如果成功,则返回True ,否则返回False 。

mode必须是QIODevice.ReadOnlyQIODevice.WriteOnlyQIODevice.ReadWrite。它也可能有额外的标记,如QIODevice.TextQIODevice.Unbuffered

Note: In WriteOnly or ReadWrite模式下,如果相关的文件不存在,该函数将尝试打开它之前,创建一个新的文件。

See also QIODevice.OpenModesetFileName( ) 。

bool QFile.open (self, int fd, QIODevice.OpenMode flags)

bool QFile.open (self, int fd, QIODevice.OpenMode flags, FileHandleFlags handleFlags)

Permissions QFile.permissions (self)

返回的完整或的结果组合在一起QFile.Permission对于该文件。

See also setPermissions()和setFileName( ) 。

Permissions QFile.permissions (QString filename)

这是一个重载函数。

返回的完整或的结果组合在一起QFile.PermissionfileName

int QFile.pos (self)

从重新实现QIODevice.pos( ) 。

str QFile.readData (self, int maxlen)

从重新实现QIODevice.readData( ) 。

str QFile.readLineData (self, int maxlen)

从重新实现QIODevice.readLineData( ) 。

QString QFile.readLink (self)

QString QFile.readLink (QString fileName)

bool QFile.remove (self)

通过删除指定的文件fileName( ) 。成功返回True ,否则返回False 。

它被删除之前,该文件被关闭。

See also setFileName( ) 。

bool QFile.remove (QString fileName)

这是一个重载函数。

移除由指定的文件fileName给出。

成功返回True ,否则返回False 。

See also remove( ) 。

bool QFile.rename (self, QString newName)

重命名当前由指定的文件fileName()来newName。成功返回True ,否则返回False 。

如果有名称的文件newName已经存在,重命名( )返回FALSE(即,QFile不会复盖它)。

该文件被关闭它将被重命名之前。

See also setFileName( ) 。

bool QFile.rename (QString oldName, QString newName)

这是一个重载函数。

重命名文件oldNamenewName。成功返回True ,否则返回False 。

如果有名称的文件newName已经存在,则rename( )返回False (即,QFile不会复盖它)。

See also rename( ) 。

bool QFile.resize (self, int sz)

设置文件的大小(以字节为单位)sz。返回True如果该文件,如果大小调整成功,否则返回False 。如果sz比文件大目前是新的字节将被设置为0,如果sz较小的文件被简单地截断。

See also size()和setFileName( ) 。

bool QFile.resize (QString filename, int sz)

这是一个重载函数。

Sets fileName大小(以字节为单位)sz。返回True如果该文件,如果大小调整成功,否则返回False 。如果sz大于fileName目前是新的字节将被设置为0,如果sz较小的文件被简单地截断。

See also resize( ) 。

bool QFile.seek (self, int offset)

从重新实现QIODevice.seek( ) 。

对于随机存取设备,此函数设置当前位置pos,返回True表示成功,或False,如果发生了错误。对于顺序的设备,默认的行为是什么都不做,返回False 。

寻求超越一个文件的结尾:如果位置超出了文件的末尾,再求( )不得立即扩展文件。如果写在这个位置上进行,那么该文件将被延长。该文件的文件的前端部和新写入的数据之间的内容是不确定的,平台和文件系统之间的不同而不同。

QFile.setFileName (self, QString name)

设置name该文件的。该名称可以没有路径,相对路径或绝对路径。

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

如果文件名没有路径或相对路径,使用的路径将是应用程序的当前目录路径at the time of the open()打电话。

例如:

 QFile file;
 QDir.setCurrent("/tmp");
 file.setFileName("readme.txt");
 QDir.setCurrent("/home");
 file.open(QIODevice.ReadOnly);      // opens "/home/readme.txt" under Unix

请注意目录分隔符“/”适用于Qt所支持的所有操作系统。

See also fileName( )QFileInfoQDir

bool QFile.setPermissions (self, Permissions permissionSpec)

设置权限的文件到permissions规定。返回True,如果成功,则返回False的权限不能被修改。

See also permissions()和setFileName( ) 。

bool QFile.setPermissions (QString filename, Permissions permissionSpec)

这是一个重载函数。

设置权限fileName文件以permissions

int QFile.size (self)

从重新实现QIODevice.size( ) 。

返回文件的大小。

对于UNIX上的(例如那些在常规空文件/proc) ,该函数返回0;这样一个文件的内容按要求在响应你的呼唤​​产生read( ) 。

QString QFile.symLinkTarget (self)

返回由符号链接(或快捷方式在Windows上)所指的文件或目录被指定的绝对路径fileName,或者返回一个空字符串,如果fileName没有对应的符号链接。

这个名字可能并不代表现有的文件,它只是一个字符串。QFile.exists( )返回True ,如果符号链接指向现有的文件。

这个函数中引入了Qt 4.2中。

QString QFile.symLinkTarget (QString fileName)

这是一个重载函数。

返回文件或目录的符号链接的绝对路径(或快捷方式在Windows上)指向,或者如果对象不是一个符号链接一个空字符串。

这个名字可能并不代表现有的文件,它只是一个字符串。QFile.exists( )返回True ,如果符号链接指向现有的文件。

这个函数中引入了Qt 4.2中。

See also fileName()和setFileName( ) 。

bool QFile.unmap (self, sip.voidptr address)

取消映射的内存address

返回True如果取消映射成功,否则返回False 。

此功能被引入Qt的4.4 。

See also map()和QAbstractFileEngine.supportsExtension( ) 。

QFile.unsetError (self)

设置文件的错误QFile.NoError

See also error( ) 。

int QFile.writeData (self, str data)

从重新实现QIODevice.writeData( ) 。




PyQt 4.10.3 for X11 Copyright © Riverbank Computing Ltd and Nokia 2012 Qt 4.8.5