主页 | 所有的类 | 主要的类 | 注释的类 | 分组的类 | 函数 |
QDir类提供了访问目录结构和它们的内容的与平台无关的方式。 详情请见……
#include <qdir.h>
QDir用来操作路径名称、关于路径和文件的访问信息和操作底层文件系统。
QDir使用相对或绝对文件路径来指向一个文件。绝对路径是从目录分隔符“/”或者带有一个驱动器标识(除了在Unix下)。如果你总是使用“/”作为目录分隔符,Qt将会把你的路径转化为符合底层的操作系统的。相对文件名是由一个目录名称或者文件名开始并且指定一个相对于当前路径的路径。
“当前”路径是指应用程序的工作目录。QDir自己的路径可以通过setPath()设置并且通过path()获得。
一个绝对路径的实例是字符串“/tmp/quartz”,相对路径看起来像是“src/fatlib”。你可以使用函数isRelative()来检查一个QDir使用的是相对还是绝对文件路径。调用convertToAbs()可以把一个相对的QDir转化为绝对的。使用cleanDirPath()可以得到一个简化的路径。为了获得没有符号连接或者多余的“..”元素的路径,请使用canonicalPath()。路径可以通过setPath()设置,或者使用cd()和cdUp()来改变。
QDir提供了几个静态函数,例如,setCurrent()设置应用程序的工作目录并且currentDirPath()来获得应用程序的工作目录。访问一些普通的路径是由以下一些静态函数提供的,current()、home()和root()返回QDir对象或者currentDirPath()、homeDirPath()和rootDirPath()返回字符串路径。
count()返回目录中的条目数量。通过entryList()可以获得目录中的所有文件和目录的名称的字符串列表。如果你希望得到QFileInfo指针的列表请使用entryInfoList()。这些函数都可以使用名称过滤器、属性过滤器(例如只读、只要文件不要目录等等)和排列顺序。过滤器和排序可以调用setNameFilter()、setFilter()和setSorting()来设置。它们可以通过entryList()和entryInfoList()的参数来指定。
mkdir()可以创建一个新目录,rename()可以重命名一个目录并且rmdir()可以移除一个已经存在的目录。remove()可以移除一个已经存在的文件。你可以通过exists()、isReadable()和isRoot()来询问一个目录。
使用filePath()可以得到一个带有文件名的路径,并且dirName()可以得到目录名称,这两个函数都不能检测文件或者目录是否存在。
drives()提供根目录的列表,在Unix系统上,这个返回一个只包含根目录“/”的列表,在Windows上,这个列表将包含“C:/”并且还有“D:/”等等。
如果你需要一个适应底层操作系统形式的路径,请使用convertSeparators()。
实例:
请参考一个目录是否存在。
QDir d( "example" ); // “./example” if ( !d.exists() ) qWarning( "Cannot find the example directory" );
Traversing directories and reading a file.
QDir d = QDir::root(); // “/” if ( !d.cd("tmp") ) { // “/tmp” qWarning( "Cannot find the \"/tmp\" directory" ); } else { QFile f( d.filePath("ex1.txt") ); // “/tmp/ex1.txt” if ( !f.open(IO_ReadWrite) ) qWarning( "Cannot create the file %s", f.name() ); }
一个列出当前目录中所有文件(不包括符号连接)的程序,按大小排序,小的在前。
#include <stdio.h> #include <qdir.h> int main( int argc, char **argv ) { QDir d; d.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks ); d.setSorting( QDir::Size | QDir::Reversed ); const QFileInfoList *list = d.entryInfoList(); QFileInfoListIterator it( *list ); QFileInfo *fi; printf( " Bytes Filename\n" ); while ( (fi = it.current()) != 0 ) { printf( "%10li %s\n", fi->size(), fi->fileName()。latin1() ); ++it; } return 0; }
也可以参考输入/输出和网络。
这个枚举变量描述的是QDir是如何选择目录中的哪些条目被返回的。被指定的过滤器的值可以由下述列表中的值或运算得到:
如果你不设置Readable、Writable或Executable中的任何一个,QDir将会设置它们三个全部。这使得默认很容易写并且同时也很有用。
实例:Readable|Writable是指列出应用程序可以读访问、写访问或者两者都可以的所有文件。Dirs|Drives是指列出驱动器、目录、所有应用程序可以读、写、执行的文件并且也包括到这些文件/目录的符号连接。
这个枚举变量描述的是QDir如何排列由entryList()或entryInfoList()返回的条目。被指定的排列的值可以由下述列表中的值或运算得到:
前四种中你只能指定一个。
如果你同时指定DirsFirst和Reversed,目录仍然会被放在前面,但是按照反向的顺序,文件仍然排在目录后面,当然也是按照反向的顺序。
也可以参考currentDirPath()。
默认的nameFilter是一个空字符串,不包含任何东西,默认的filterSpec是All,也就是说也不包含任何东西。默认的sortSpec是Name|IgnoreCase,也就是说不区分大小写按名称排序。
下面是列出“/tmp”中所有文件的实例:
QDir d( "/tmp" ); for ( int i = 0; i < d.count(); i++ ) printf( "%s\n", d[i] );
如果path为“”或零,QDir使用“.”(当前目录)。如果nameFilter为“”或零,QDir使用“*”(所有文件)。
注意path不需要存在。
也可以参考exists()、setPath()、setNameFilter()、setFilter()和setSorting()。
也可以参考operator=()。
如果acceptAbsPath为真,由分隔符“/”开始的fileName将会被不改变地立即返回。如果acceptAbsPath为假,绝对路径将被被加到fileName的前面并且结果字符串被返回。
也可以参考filePath()。
也可以参考setPath()、canonicalPath()、exists()、cleanDirPath()、dirName()和absFilePath()。
实例:fileiconview/qfileiconview.cpp。
在没有符号连接的系统上,这个函数总是返回和absPath()返回值一样的值。如果规范路径不存在(通常是因为挂起的符号连接)。
也可以参考path()、absPath()、exists()、cleanDirPath()、dirName()、absFilePath()和QString::isNull()。
如果acceptAbsPath为真,由分隔符“/”开始的路径将会导致这个函数改变到这个绝对路径。如果acceptAbsPath为假,dirName前面的任何数量的分隔符都将被移除并且这个函数将会进入到dirName中。
如果新的路径存在并且是可读的,返回真。注意如果新的目录不存在,逻辑上的cd()操作不会被执行。
调用cd( ".." )等于调用cdUp()。
也可以参考cdUp()、isReadable()、exists()和path()。
实例:fileiconview/mainwindow.cpp。
如果新的路径存在并且是可读的,返回真。注意如果新的目录不存在,逻辑上的cdUp()操作不会被执行。
也可以参考cd()、isReadable()、exists()和path()。
符号连接会被保留。这个函数不返回规范路径,但会是输入的最简化的版本。“./local”变为“local”、“local/../bin”变为“bin”并且“/local/usr/../bin”变为“/local/bin”。
也可以参考absPath()和canonicalPath()。
在Windows上,convertSeparators("c:/winnt/system32")返回“c:\winnt\system32”。
在一些操作系统上,例如在Unix上,返回的字符串可能和参数是一样的。
也可以参考isRelative()。
Equivalent to entryList()。count()。
也可以参考operator[]()和entryList()。
使用path()来访问QDir对象的路径。
也可以参考currentDirPath()和QDir::QDir()。
也可以参考current()。
实例:helpviewer/helpwindow.cpp和qdir/qdir.cpp。
不会执行检测来确保这个名称的目录真正存在。
也可以参考path()、absPath()、absFilePath()、exists()和QString::isNull()。
返回的指针的所有权归Qt。调用者不要删除或者修改它。
实例:dirview/main.cpp。
这个函数是废弃的。它的提供只是为了保证旧代码能够工作。我们强烈建议在新代码中不要使用它。
这个函数被包含是因为可以很容易地从Qt 1.x移植到Qt 3.0,它和entryList()是一样地,但是文件名的编码方式是使用QFile::encodedName()的8位字符串。
使用它比使用entryList()更有效率。
这个函数是废弃的。它的提供只是为了保证旧代码能够工作。我们强烈建议在新代码中不要使用它。
这是一个重载成员函数,用于提供方便。它的行为基于上面的函数。
这个函数被包含是因为可以很容易地从Qt 1.x移植到Qt 3.0,它和entryList()是一样地,但是文件名的编码方式是使用QFile::encodedName()的8位字符串。
使用它比使用entryList()更有效率。
过滤器和排序的规定可以使用nameFilter、filterSpec和sortSpec参数来指定。
如果这个目录是不可读的或者不存在,返回0。
返回的指针是一个指向QFileInfoList的常量指针。这个列表归QDir对象所有并且将会在同一个QDir实例下次调用entryInfoList()时被重新使用。如果你想在调用这个函数之后保留这个列表的条目,你将需要复制它们。
也可以参考entryList()、setNameFilter()、setSorting()和setFilter()。
实例:dirview/dirview.cpp和fileiconview/qfileiconview.cpp。
返回这个目录中所有目录和文件的QFileInfo对象的列表,根据setSorting()排序并且根据setFilter()和setNameFilter()进行过滤。
过滤器和排序的规定可以使用filterSpec和sortSpec参数来指定。
如果这个目录是不可读的或者不存在,返回0。
返回的指针是一个指向QFileInfoList的常量指针。这个列表归QDir对象所有并且将会在同一个QDir实例下次调用entryInfoList()时被重新使用。如果你想在调用这个函数之后保留这个列表的条目,你将需要复制它们。
也可以参考entryList()、setNameFilter()、setSorting()和setFilter()。
过滤器和排序的规定可以使用nameFilter、filterSpec和sortSpec参数来指定。
如果这个目录是不可读的或者不存在,返回空的列表。。
也可以参考entryInfoList()、setNameFilter()、setSorting()和setFilter()。
实例:table/statistics/statistics.cpp。
返回这个目录中所有目录和文件的名称的列表,根据setSorting()排序并且根据setFilter()和setNameFilter()进行过滤。
过滤器和排序的规定可以使用filterSpec和sortSpec参数来指定。
如果这个目录是不可读的或者不存在,返回空的列表。。
也可以参考entryInfoList()、setNameFilter()、setSorting()和setFilter()。
如果acceptAbsPath为真,由分隔符“/”开始的路径将会使用绝对路径检查这个文件。如果acceptAbsPath为假,name开始的任何数量的分隔符将会被移除并且结果文件名将被检查。
如果文件存在,返回真,否则返回假。
也可以参考QFileInfo::exists()和QFile::exists()。
如果directory存在,返回真。(如果发现一个同名的文件,这个函数将返回假)。
也可以参考QFileInfo::exists()和QFile::exists()。
如果acceptAbsPath为真,由分隔符“/”开始的fileName将会被不改变地立即返回。如果acceptAbsPath为假,绝对路径将被被加到fileName的前面并且结果字符串被返回。
也可以参考absFilePath()、isRelative()和canonicalPath()。
在Windows NT/2000下,这个函数通过连接HOMEDRIVE和HOMEPATH环境变量来形成这个路径。
在Windows 9x和非Windows操作系统,HOME环境变量被使用。
如果这个环境变量没有被设置,rootDirPath()用来代替它。
也可以参考homeDirPath()。
返回用户的主目录的绝对路径。
也可以参考home()。
也可以参考QFileInfo::isReadable()。
实例:dirview/dirview.cpp和fileiconview/qfileiconview.cpp。
也可以参考convertToAbs()。
也可以参考isRelative()。
注意:如果目录是一个连接到根目录的符号连接,这个函数返回假。如果你想测试这一点,你可以使用canonicalPath():
实例:
QDir d( "/tmp/root_link" ); d = d.canonicalPath(); if ( d.isRoot() ) qWarning( "It IS a root link!" );
也可以参考root()和rootDirPath()。
(请参考QRegExp通配符匹配。)
也可以参考QRegExp::match()。
如果fileName与列表filters中的通配符模式匹配,返回真。
(请参考QRegExp通配符匹配。)
也可以参考QRegExp::match()。
也可以参考setMatchAllDirs()。
如果acceptAbsPath为真,由分隔符“/”开始的dirName将会被不改变地立即返回。如果acceptAbsPath为假,dirName的开始的任意个分隔符将被移除。
如果成功,返回真,否则返回假。
也可以参考rmdir()。
实例:
// 当前目录为“/usr/local” QDir d1( "/usr/local/bin" ); QDir d2( "bin" ); if ( d1 != d2 ) qDebug( "They differ\n" ); // 这是被打印的
设置这个目录的路径为给定的path。
实例:
// 当前目录为“/usr/local” QDir d1( "/usr/local/bin" ); QDir d2( "bin" ); d2.convertToAbs(); if ( d1 == d2 ) qDebug( "They're the same\n" ); // 这是被打印的
如果index超出范围或者entryList()函数失败,返回一个零字符串。
返回的路径可能是相对的也可能是绝对的(请参考setPath())。
也可以参考setPath()、absPath()、exists()、cleanDirPath()、dirName()、absFilePath()和convertSeparators()。
如果acceptAbsPath为真,由分隔符“/”开始的路径将会移除使用绝对路径的文件。如果acceptAbsPath为假,fileName开始的任意个分隔符将被移除并且结果文件将被移除。
如果文件移除成功,返回真,否则返回假。
如果acceptAbsPath为真,由分隔符“/”开始的路径将会重命名使用绝对路径的文件。如果acceptAbsPath为假,fileName开始的任意个分隔符将被移除并且结果文件将被重命名。
如果成功,返回真,否则返回假。
在绝大多数文件系统中,只有在oldName不存在或者newName和oldName不在同一个分区中,rename()才会失败。在Windows下,如果newName已经存在,rename()将会失败。无论如何,还有其它几个原因导致rename()失败。例如,例如在文件系统中如果newName指向一个打开的文件,rename()会失败。
实例:fileiconview/qfileiconview.cpp。
如果acceptAbsPath为真,由分隔符“/”开始的路径将会移除使用绝对路径的目录。如果acceptAbsPath为假,dirName开始的任意个分隔符将被移除并且结果目录将被移除。
为了使rmdir()成功,这个目录必须为空。
如果成功,返回真,否则返回假。
也可以参考mkdir()。
也可以参考rootDirPath()和drives()。
在Unix操作系统这个返回“/”。在Windows文件系统这个返回“C:/”。
你不需要这个函数来构建文件路径。如果你一直使用“/”,Qt将会把你的路径转化为符合底层操作系统的路径的。
也可以参考filter()和setNameFilter()。
也可以参考matchAllDirs()。
nameFilter是一个可以理解“*”和“?”的通配符过滤器。(请参考QRegExp通配符匹配。)你可以使用单个空格“ ”或者分号“;”来分割几个过滤器条目。
例如,如果你想entryList()和entryInfoList()列出所有以“.cpp”和“.h”结尾的文件,你需要使用dir.setNameFilter("*.cpp *.h")或dir.setNameFilter("*.cpp;*.h")。
也可以参考nameFilter()和setFilter()。
路径可以是相对的也可以是绝对的。绝对路径是由目录分隔符“/”或驱动器标识开始的(除了Unix下)。相对路径是一个指定了相对于当前目录的目录名称和文件名称。一个绝对路径的实例是“/tmp/quartz”,一个相对路径的实例是“src/fatlib”。
也可以参考path()、absPath()、exists()、cleanDirPath()、dirName()、absFilePath()、isRelative()和convertToAbs()。
sortSpec是由QDir::SortSpec中的枚举变量的值或运算得到。
返回由setSorting()设置的值。
也可以参考setSorting()和SortSpec。
这个文件是Qt工具包一部分。 版权所有 © 1995-2002 Trolltech。保留所有权利。
Copyright © 2002 Trolltech | Trademarks | 译者:Cavendish | Qt 3.0.5版
|