Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4470456
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: C/C++

2011-08-01 15:12:23

工程代码: Dir.rar  


书籍:精通Qt4编程 chapter08 目录操作和文件管理

   QDir类具有存取目录结构和内容的能力。使用QDir可以操作目录
存取目录或文件信息/操作底层文件系统,而且还可以存取Qt的资源文件
QDir可以使用相对路径或绝对路径指向一个文件。isRelative isAbsolute函数
判断QDir是相对还是绝对路径。  makeAbsolute 转换

   目录的路径可以通过path函数返回,通过setPath函数设置新路经,绝对路径使用absoluteath()返回。目录名可以使用dirName获得,它通常返回绝对路径中的最后一个元素。如果QDir指向当前目录,则返回“.”。目录的路径可以通过cd()  cdUp改变。可以使用mkdir创建目录,rename改变目录*/

     判断目录是否存在可以使用exists(),目录的属性可以使用 isReadable(),
isAbsolute(),isRelative()和 isRoot() 来获得。目录下右很多条目,包括
文件/目录和符号链接,总的条目数可以使用 count()类统计。entryList()
可以返回目录下所有条目组成的字符串链表。文件可以使用remove函数删除,删除目录用 rmdir()



  1. #include <iostream>
  2. #include <QtCore>

  3. using namespace std;

  4. /*通过实现类似于linux的du命令来展示目录操作的使用。linux的du可以获得目录及
  5. 子目录占用的磁盘空间大小。 这个例子获取目录及子目录中所有的文件的大小*/

  6. qint64 du(const QString &path)
  7. {
  8.     QDir dir(path);//QDir类具有存取目录结构和内容的能力
  9.     qint64 size = 0;

  10.     //entryInfoList(Qdir::Files)函数返回文件信息,根据这些信息计算文件的大小
  11.     foreach (QFileInfo fileInfo, dir.entryInfoList(QDir::Files))
  12.             size += fileInfo.size();
  13.     // 判断是否有子目录,如果有,则递归计算
  14.     //entryList(QDir::Dirs | QDir::NoDotAndDotDot 返回所有子目录并过滤掉
  15.     // '.' '..'目录
  16.     //使用QDir::separator() 函数来返回特定平台的目录分割符
  17.     foreach (QString subDir, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot))
  18.             size += du(path + QDir::separator() + subDir);

  19.     char unit = 'B';
  20.     quint64 curSize = size;
  21.     if(curSize > 1024) {
  22.             curSize /= 1024;
  23.             unit = 'K';
  24.             if(curSize > 1024) {
  25.                     curSize /= 1024;
  26.                     unit = 'M';
  27.                     if(curSize > 1024) {
  28.                             curSize /= 1024;
  29.                             unit = 'G';
  30.                     }
  31.             }
  32.     }
  33.     cout << curSize << unit << "\t" << qPrintable(path) << endl;
  34.     return size;
  35. }

  36. /*主程序接受命令行参数作为统计的目录,如不提供则使用当前目录
  37. 函数du完成统计目录及子目录中所有的大小。*/
  38. int main(int argc, char *argv[])
  39. {
  40.     QCoreApplication app(argc, argv);
  41.         QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
  42.         QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
  43.     
  44.     QStringList args = app.arguments();
  45.     QString path;
  46.     if (args.count() > 1)
  47.         path = args[1];
  48.     else
  49.         path = QDir::currentPath();
  50.     du(path);
  51.     return 0;
  52. }







阅读(6784) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~