Home · All Classes · Modules · QSS HELP · QSS 案例 · VER007 HOME |
QFile类提供了读取和写入文件的接口。More...
继承QIODevice。
通过继承QTemporaryFile。
QFile类提供了读取和写入文件的接口。
的QFile是用于读取和写入文本文件和二进制文件的I / O设备和resources。一个QFile时可能会或单独使用,更方便,用QTextStream or QDataStream。
文件名通常是通过在构造函数,但它可以被设置在任何时候使用setFileName( ) 。 QFile时预计,文件分隔符是' /' ,无论操作系统。不支持使用其他分隔符(比如,' \ ')的。
您可以检查一个文件是否存在使用exists( ) ,并删除使用文件remove( ) 。通过提供(更先进的文件系统相关的操作QFileInfo和QDir。 )
该文件被打开open( ) ,关闭了与close( ) ,并用冲洗flush( ) 。数据通常是读取和写入使用QDataStream or QTextStream,但你也可以致电QIODevice继承功能read( )readLine( )readAll( )write( ) 。 QFile时也继承getChar( )putChar()和ungetChar(),它在工作时一个字符。
该文件的大小是由返回size( ) 。您可以使用获取当前文件位置pos( ) ,或者移动到使用新的文件位置seek( ) 。如果你已经达到了文件的末尾,atEnd( )返回True 。
下面的例子逐行读取文本文件中的行:
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时假定二进制,即它不存储在文件中的字节执行任何转换。
下面的示例使用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时,QFileInfo和QDir访问与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(); }
不像其他的QIODevice实现方式中,如QTcpSocket, QFile时不发出aboutToClose( )bytesWritten() ,或readyRead( )信号。这实现细节意味着的QFile是不适合读,写某些类型的文件,比如在Unix平台上的设备文件。
文件权限在Linux / Mac的OS X和Windows不同的处理。在一个非writable在Linux目录,不能创建文件。这并不总是在Windows上,在那里,比如, “我的文档”目录通常是不可写的,但它还是有可能在其中创建文件的情况下。
该枚举描述了可以通过返回的错误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 | 该文件不能被复制。 |
打开一个文件来指定仅适用于文件,而不是一个通用的附加选项时,此枚举使用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值的或组合。
该枚举描述了可以使用的特殊选项map()函数。
Constant | Value | Description |
---|---|---|
QFile.NoOptions | 0 | 没有选项。 |
这个枚举被引入或修改的Qt 4.4 。
此枚举所使用的许可( )函数来报告的权限和文件的所有权。该值可以是或的结果一起测试多个权限和所有权值。
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 。它存储权限值的或组合。
构造一个新的文件对象来表示文件给定的name。
该parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。
构造一个新的文件对象与给定parent。
该parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。
构造一个新的文件对象与给定parent来表示该文件具有指定的name。
从重新实现QIODevice.atEnd( ) 。
返回True如果文件的末尾已经达到,否则返回False 。
对于UNIX上的(例如那些在常规空文件/proc) ,这个函数返回True ,因为文件系统报告,这样的文件的大小为0 。因此,您不应该依赖于了atEnd ()从这些文件中读取数据时,而是调用read(),直到没有更多的数据可以被读取。
从重新实现QIODevice.close( ) 。
电话QFile.flush()和关闭该文件。从齐平的错误被忽略。
See also QIODevice.close( ) 。
目前由指定将文件复制fileName( )到一个名为newName。成功返回True ,否则返回False 。
请注意,如果有名称的文件newName已经存在,复制( )返回FALSE(即QFile不会复盖它)。
源文件被关闭之前,它被复制。
See also setFileName( ) 。
这是一个重载函数。
复制文件fileName至newName。成功返回True ,否则返回False 。
如果有名称的文件newName已经存在,则copy( )返回False (即,QFile不会复盖它)。
See also rename( ) 。
这样做的逆QFile.encodeName( )使用localFileName。
See also setDecodingFunction()和encodeName( ) 。
这是一个重载函数。
返回Unicode版本的给定localFileName。看encodeName( )了解详情。
默认情况下,此功能将fileName通过用户的语言环境来确定本地8位编码。这足以让用户选择的文件名。文件名硬编码到应用程序中应该只使用7位ASCII字符的文件名。
See also decodeName()和setEncodingFunction( ) 。
返回文件的错误状态。
在I / O设备的状态返回一个错误代码。例如,如果open( )返回False ,或读/写操作返回-1 ,该函数可以被调用来找出原因操作失败的原因。
See also unsetError( ) 。
返回True如果指定的文件fileName存在,否则返回False 。
这是一个重载函数。
返回True如果指定的文件fileName( )存在,否则返回False 。
See also fileName()和setFileName( ) 。
返回名称按设定setFileName( )或向QFile构造函数。
See also setFileName()和QFileInfo.fileName( ) 。
刷新所有缓冲的数据文件。成功返回True ,否则返回False 。
返回文件的文件句柄。
这是一个小的正整数,适合与C库函数,如fdopen ( )和fcntl ( )的使用。在使用文件描述符的套接字(即Unix系统,而不是Windows)中的句柄可以被使用的系统QSocketNotifier为好。
如果文件没有打开,或者有错误,手柄( )返回-1 。
此功能不支持Windows CE 。
在Symbian ,这个函数返回-1,如果该文件被正常开启,为基于Symbian操作系统的文件句柄不适合在一个int ,并与该手柄将用于C库函数不兼容。如果文件是使用采取开放的C库文件句柄/文件描述符重载打开,那么这个函数返回相同的句柄。
See also QSocketNotifier。
从重新实现QIODevice.isSequential( ) 。
返回True如果该文件只能按顺序操作,否则返回False 。
大多数文件支持随机访问,但一些特殊的文件可能不会。
See also QIODevice.isSequential( ) 。
创建一个名为链接linkName指向当前所指定的文件fileName( ) 。什么链接是依赖于底层的文件系统(无论是在Windows还是Unix上符号链接的快捷方式)上。成功返回True ,否则返回False 。
此功能不会复盖已经存在的实体在文件系统中,在这种情况下,link()将返回False ,并设置error() to return RenameError。
Note:要创建在Windows上的有效链接,linkName必须有一个.lnk文件扩展名。
Note:Symbian的文件系统不支持链接。
See also setFileName( ) 。
这是一个重载函数。
创建一个名为链接linkName指向该文件fileName。什么链接是依赖于底层的文件系统(无论是在Windows还是Unix上符号链接的快捷方式)上。成功返回True ,否则返回False 。
See also link( ) 。
地图size该文件的字节到存储器中,起始offset。一个文件应该是开放的地图成功,但该文件并不需要保持开放的内存被映射后。当QFile被破坏或一个新的文件打开与该对象,还没有被映射任何地图将自动被取消映射。
任何映射选项可以通过传递flags。
返回一个指针,该存储器或0,如果存在错误。
Note:在Windows CE 5.0的映射发生前的文件将被关闭。
此功能被引入Qt的4.4 。
See also unmap()和QAbstractFileEngine.supportsExtension( ) 。
从重新实现QIODevice.open( ) 。
打开使用文件OpenMode mode如果成功,则返回True ,否则返回False 。
该mode必须是QIODevice.ReadOnly,QIODevice.WriteOnly或QIODevice.ReadWrite。它也可能有额外的标记,如QIODevice.Text和QIODevice.Unbuffered。
Note: In WriteOnly or ReadWrite模式下,如果相关的文件不存在,该函数将尝试打开它之前,创建一个新的文件。
See also QIODevice.OpenMode和setFileName( ) 。
返回的完整或的结果组合在一起QFile.Permission对于该文件。
See also setPermissions()和setFileName( ) 。
这是一个重载函数。
返回的完整或的结果组合在一起QFile.Permission为fileName。
从重新实现QIODevice.pos( ) 。
从重新实现QIODevice.readData( ) 。
从重新实现QIODevice.readLineData( ) 。
通过删除指定的文件fileName( ) 。成功返回True ,否则返回False 。
它被删除之前,该文件被关闭。
See also setFileName( ) 。
这是一个重载函数。
移除由指定的文件fileName给出。
成功返回True ,否则返回False 。
See also remove( ) 。
重命名当前由指定的文件fileName()来newName。成功返回True ,否则返回False 。
如果有名称的文件newName已经存在,重命名( )返回FALSE(即,QFile不会复盖它)。
该文件被关闭它将被重命名之前。
See also setFileName( ) 。
这是一个重载函数。
重命名文件oldName至newName。成功返回True ,否则返回False 。
如果有名称的文件newName已经存在,则rename( )返回False (即,QFile不会复盖它)。
See also rename( ) 。
设置文件的大小(以字节为单位)sz。返回True如果该文件,如果大小调整成功,否则返回False 。如果sz比文件大目前是新的字节将被设置为0,如果sz较小的文件被简单地截断。
See also size()和setFileName( ) 。
这是一个重载函数。
Sets fileName大小(以字节为单位)sz。返回True如果该文件,如果大小调整成功,否则返回False 。如果sz大于fileName目前是新的字节将被设置为0,如果sz较小的文件被简单地截断。
See also resize( ) 。
从重新实现QIODevice.seek( ) 。
对于随机存取设备,此函数设置当前位置pos,返回True表示成功,或False,如果发生了错误。对于顺序的设备,默认的行为是什么都不做,返回False 。
寻求超越一个文件的结尾:如果位置超出了文件的末尾,再求( )不得立即扩展文件。如果写在这个位置上进行,那么该文件将被延长。该文件的文件的前端部和新写入的数据之间的内容是不确定的,平台和文件系统之间的不同而不同。
设置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( )QFileInfo和QDir。
设置权限的文件到permissions规定。返回True,如果成功,则返回False的权限不能被修改。
See also permissions()和setFileName( ) 。
这是一个重载函数。
设置权限fileName文件以permissions。
从重新实现QIODevice.size( ) 。
返回文件的大小。
对于UNIX上的(例如那些在常规空文件/proc) ,该函数返回0;这样一个文件的内容按要求在响应你的呼唤产生read( ) 。
返回由符号链接(或快捷方式在Windows上)所指的文件或目录被指定的绝对路径fileName,或者返回一个空字符串,如果fileName没有对应的符号链接。
这个名字可能并不代表现有的文件,它只是一个字符串。QFile.exists( )返回True ,如果符号链接指向现有的文件。
这个函数中引入了Qt 4.2中。
这是一个重载函数。
返回文件或目录的符号链接的绝对路径(或快捷方式在Windows上)指向,或者如果对象不是一个符号链接一个空字符串。
这个名字可能并不代表现有的文件,它只是一个字符串。QFile.exists( )返回True ,如果符号链接指向现有的文件。
这个函数中引入了Qt 4.2中。
See also fileName()和setFileName( ) 。
取消映射的内存address。
返回True如果取消映射成功,否则返回False 。
此功能被引入Qt的4.4 。
See also map()和QAbstractFileEngine.supportsExtension( ) 。
设置文件的错误QFile.NoError。
See also error( ) 。
从重新实现QIODevice.writeData( ) 。
PyQt 4.10.3 for X11 | Copyright © Riverbank Computing Ltd and Nokia 2012 | Qt 4.8.5 |